Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Julia-ohjelma RSA_keygenerator.jl
- # Luo satunnaisen halutunkokoisen suuren julkisen RSA-avaimen n
- # Laskee privaatin purkuavaimen d
- # Käyttää systeemin entropiaa hyödyntävää satunnaislukugeneraattoria
- # Juhani Kaukoranta 10.9.2019
- using Random
- using Primes
- rng = RandomDevice()
- e = 65537 # public sertified exponent
- function generateLargePrime(keysize)
- # Arpoo suuren alkuluvun ja tarkistaa sen
- # Millerin-Rabinin testillä
- while true
- num = rand(rng,(big(2)^(keysize-1): big(2)^(keysize)))
- if isprime(num)
- return num
- end
- end
- end
- function createPublic_PrivateKey(bitlength)
- randomdivisor = rand(rng,25:30)
- bitlength_p = round(Int,bitlength/2 - bitlength/randomdivisor)
- bitlength_q = bitlength - bitlength_p
- p = generateLargePrime(bitlength_p)
- q = generateLargePrime(bitlength_q)
- # Carmichael's totient
- totient = lcm(p-1,q-1)
- while totient % e == 0 # totient ei saa olla jaollinen e:lla
- p = generateLargePrime(bitlength_p)
- q = generateLargePrime(bitlength_q)
- totient = lcm(p-1,q-1)
- end
- n = p*q
- d = invmod(e,totient)
- # n on julkinen RSA-avain
- # d on privaatti eli salainen purkuavain
- # p ja q ovat avaimen n alkulukutekijät
- return p,q,n,d
- end
- println("Anna RSA-avaimen haluttu bittipituus, esim 256, 512,1024,2048 ")
- input_txt = readline()
- bittipituus = parse(BigInt,input_txt)
- p,q,n,d = createPublic_PrivateKey(bittipituus)
- println("p = ",p)
- println("q = ",q)
- println("julkinen avain n = ",n)
- println("p*q = ",p*q)
- println("privaatti purkuavain d = ",d)
- println("julkinen eksponentti e = ",e)
- println("Paina Enter lopettaaksesi")
- lopetus = readline()
Advertisement
Add Comment
Please, Sign In to add comment