Ruby中的公钥加密演示

Ruby中的公钥加密演示,ruby,rsa,Ruby,Rsa,我写了下面的ruby脚本来帮助我的学生理解公钥加密。我遵循了此处所示的“铅笔和纸”方法: 只要不选择29作为p或q,这就可以正常工作。如果选择了29,它将挂起计算密钥。有人能告诉我为什么吗 #!/usr/bin/env ruby -wKU #initialize primes, p, q, n, z, k, j, m,e,d = nil def prime primes = [2,3,5,7,11,13,17,19,23,29,31] primes.sample end #pick

我写了下面的ruby脚本来帮助我的学生理解公钥加密。我遵循了此处所示的“铅笔和纸”方法:

只要不选择29作为p或q,这就可以正常工作。如果选择了29,它将挂起计算密钥。有人能告诉我为什么吗

#!/usr/bin/env ruby -wKU

#initialize
primes, p, q, n, z, k, j, m,e,d = nil

def prime
  primes = [2,3,5,7,11,13,17,19,23,29,31]
  primes.sample
end

#pick p
p= prime
puts "p: " + p.to_s

#pick q
q=p
while p==q
  q = prime
end
puts "q: " + q.to_s

#find n
n=p*q
puts "n: " + n.to_s

#find z
z=(p-1)*(q-1)
puts "z: " + z.to_s

#pick a relative prime of the totient
k=7

puts "k: " + k.to_s

#calculate secret key
j=0
while j*k % z != 1
  j+=1
end

puts "j: " + j.to_s
#message
m=16
puts "Message: " + m.to_s

#encrypt
e = m**k % n
puts "Encrypted: " + e.to_s

#decrypt
d = e**j % n
puts "Decrypted: " + d.to_s

当选择29作为
p
q
时,
z
将28作为一个因子,因此
k=7
而不是如您的评论所声称的那样,是客户的相对素数


(这意味着
j*k%z
始终是7的倍数,因此循环永远不会终止。)

噢,谢谢!我想我实际上需要做数学运算来计算一个相对素数(或者为了简单起见停在23)。