首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby中的公钥加密演示

Ruby中的公钥加密演示
EN

Stack Overflow用户
提问于 2012-04-17 04:40:18
回答 1查看 313关注 0票数 2

我写了下面的ruby脚本来帮助我的学生理解公钥加密。我遵循了这里所示的“纸笔”方法:http://sergematovic.tripod.com/rsa1.html

只要29既不是p也不是q就行得通,如果选择了29,它就会挂起计算密钥。有人能告诉我这是为什么吗?

代码语言:javascript
复制
#!/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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-17 04:45:23

当29被选为pq时,z有28作为因子,因此k = 7而不是像你的评论所说的是一个整体的相对质数!

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10181359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档