KRzA/5-rsa/rsa.rb

89 lines
3.0 KiB
Ruby
Executable File

#!/usr/bin/ruby
######################################
#
# Marcin Woźniak
# s434812
#
#####################################
load 'modul1.rb'
def generateKeys
p = 0
q = 0
pThread = Thread.new {
while true
p = generate(4072)
if primalityTest(p)
break
end
end
}
qThread = Thread.new {
while true
q = generate(4072)
if primalityTest(q)
break
end
end
}
pThread.join
qThread.join
n = p * q
phi = (p-1)*(q-1)
while true
e = SecureRandom.random_number(0..phi)
d = reciprocal_Phi_p(e,phi)
if nwd(e,phi) == 1 && d > 1
puts
puts "p: " + p.inspect
puts "q: " + q.inspect
return [n,e,d]
end
end
end
starting = Process.clock_gettime(Process::CLOCK_MONOTONIC)
keys = generateKeys
n = keys[0]
e = keys[1]
d = keys[2]
#n = 71080843952579821536808659073592377254223354771744338571962856057130579776693987295676130693029061514639099711984974088368385378005316058780753506803821677092757604732237641915894898542024389645033816194122765899995205755268676569966322474451123277045758957825791521431858660785814981788128816934481845228865657975621955459104448356520475723668712159918538393669309901176250743549048998632825755599078853414670244789822627531750788254524608995657662504492295387636179849501161984714800687072140115145090431501734806775267531078231806454936476311362413330800768637545279561130577224924702796746010760553
#e = 8568635405550720312742658917750002897800817834357945962764047863500567259665199816353662868482237115378064375549642009491300055266130153886053132983796459461609268298948099540540738951524519496677791059134156506559882797235730790145589763065725951828812878626920288539460548881334613744784835397042451
#d = 32386335677908137318863892465199815383071366385532868349312560590843149093721116637041180595846942643803479043836883315885718155256027682010626277652945965025765385727195326719478281847964209269755614625652671779134510726553430069309309313886139982070647506703881883189451691281061102384111546214788607921485198991338966374053889616005762912361311568996467325682971499059915979784926145499607252111375306393358879385624365652331679677612939527522511050610059838669634395550442681215662470714984216749116088717552501057409391377221576136360347218774125110880473654893374271141612063430957777800926156251
pubKey = [n,e]
privKey = [n,d]
message="1234"
if message.to_i > n.to_i
return "error"
end
cipher = betterExponentiation(message.to_i,e.to_i,n.to_i)
decryptedMessage = betterExponentiation(cipher.to_i,d.to_i,n.to_i)
puts
puts "pubKey Alice: " + pubKey.inspect
puts "privKey Alice: " + privKey.inspect
puts
puts "Message: " + message.inspect
puts
puts "Cipher: " + cipher.inspect
puts "Decrypted Message: " + decryptedMessage.inspect
puts
#puts
#puts
#puts "n=" + n.inspect
#puts "e=" + e.inspect
#puts "d=" + d.inspect
ending = Process.clock_gettime(Process::CLOCK_MONOTONIC)
elapsed = ending - starting
puts "Time " + elapsed.inspect