【发布时间】:2011-02-17 11:24:33
【问题描述】:
这段代码是否会为我提供正确的 RSA 密钥值(假设其他功能正确)?我无法让我的程序正确解密,因为某些块没有正确解密
这是在python中:
import random
def keygen(bits):
p = q = 3
while p == q:
p = random.randint(2**(bits/2-2),2**(bits/2))
q = random.randint(2**(bits/2-2),2**(bits/2))
p += not(p&1) # changes the values from
q += not(q&1) # even to odd
while MillerRabin(p) == False: # checks for primality
p -= 2
while MillerRabin(q) == False:
q -= 2
n = p * q
tot = (p-1) * (q-1)
e = tot
while gcd(tot,e) != 1:
e = random.randint(3,tot-1)
d = getd(tot,e) # gets the multiplicative inverse
while d<0: # i can probably replace this with mod
d = d + tot
return e,d,n
生成一组密钥:
e = 3daf16a37799d3b2c951c9baab30ad2d
d = 16873c0dd2825b2e8e6c2c68da3a5e25
n = dc2a732d64b83816a99448a2c2077ced
【问题讨论】:
-
M2Crypto.RSA.gen_key有什么问题? -
在我看来还可以,如果有点奇怪的话。
-
这只是学术问题吗?你真的不想为真正的代码编写自己的加密货币。
-
代码风格建议:去掉'== False',把'not'放在你的函数前面。此外,将其重命名为类似 is_prime() 将使代码更具可读性。我怀疑每个人都知道“MillerRabin()”是什么。
标签: python cryptography rsa public-key