jukaukor

RSA_keygenerator.jl

Sep 10th, 2019
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.73 KB | None | 0 0
  1. # Julia-ohjelma RSA_keygenerator.jl
  2. # Luo satunnaisen halutunkokoisen suuren julkisen RSA-avaimen n
  3. # Laskee privaatin purkuavaimen d
  4. # Käyttää systeemin entropiaa hyödyntävää satunnaislukugeneraattoria
  5. # Juhani Kaukoranta 10.9.2019
  6.  
  7. using Random
  8. using Primes
  9. rng = RandomDevice()
  10. e = 65537 # public sertified exponent
  11.  
  12. function generateLargePrime(keysize)
  13. # Arpoo suuren alkuluvun ja tarkistaa sen
  14. # Millerin-Rabinin testillä
  15. while true
  16. num = rand(rng,(big(2)^(keysize-1): big(2)^(keysize)))
  17. if isprime(num)
  18. return num
  19. end
  20. end
  21. end
  22. function createPublic_PrivateKey(bitlength)
  23. randomdivisor = rand(rng,25:30)
  24. bitlength_p = round(Int,bitlength/2 - bitlength/randomdivisor)
  25. bitlength_q = bitlength - bitlength_p
  26. p = generateLargePrime(bitlength_p)
  27. q = generateLargePrime(bitlength_q)
  28. # Carmichael's totient
  29. totient = lcm(p-1,q-1)
  30. while totient % e == 0 # totient ei saa olla jaollinen e:lla
  31. p = generateLargePrime(bitlength_p)
  32. q = generateLargePrime(bitlength_q)
  33. totient = lcm(p-1,q-1)
  34. end
  35. n = p*q
  36. d = invmod(e,totient)
  37. # n on julkinen RSA-avain
  38. # d on privaatti eli salainen purkuavain
  39. # p ja q ovat avaimen n alkulukutekijät
  40. return p,q,n,d
  41. end
  42.  
  43. println("Anna RSA-avaimen haluttu bittipituus, esim 256, 512,1024,2048 ")
  44. input_txt = readline()
  45. bittipituus = parse(BigInt,input_txt)
  46. p,q,n,d = createPublic_PrivateKey(bittipituus)
  47. println("p = ",p)
  48. println("q = ",q)
  49. println("julkinen avain n = ",n)
  50. println("p*q = ",p*q)
  51. println("privaatti purkuavain d = ",d)
  52. println("julkinen eksponentti e = ",e)
  53.  
  54. println("Paina Enter lopettaaksesi")
  55. lopetus = readline()
Advertisement
Add Comment
Please, Sign In to add comment