以编程方式从`p`和`q`(RSA)生成`d`

时间:2012-01-16 17:45:36

标签: python encryption rsa public-key-encryption

我有两个号码pq。我知道我可以phi = (p-1)*(q-1)和那ed = 1 (mod phi) ......但我不确定这是什么意思。

我写了一些Python:

p = NUM
q = NUM
e = NUM
phi = (p-1)*(q-1)
d = (1 % phi)/float(e)

但我总是得到一个小数,d应该是一个整数。我做错了什么?

编辑:我可能只是不了解RSA。现在,我正在看这个页面:http://www.di-mgt.com.au/rsa_alg.html

3 个答案:

答案 0 :(得分:5)

你对数学的理解是错误的。等式

  

ed ≡1(mod φ

表示 ed 除以φ的数字的余数等于1,即就Python而言,

>>> (e*d) % phi
1

例如,如果φ =(7 - 1)(11 - 1)= 60, e = 17,那么如果我们选择 d < / em> = 53,然后我们会得到

>>> e = 17
>>> d = 53
>>> phi = 60
>>> (e*d) % phi
1

我们将 d 称为 e 的模数乘法逆。

要从 e φ生成 d ,通常使用扩展的欧几里德算法。请阅读http://en.wikipedia.org/wiki/Modular_multiplicative_inversehttps://stackoverflow.com/search?q=python+%22multiplicative+inverse%22&submit=search了解详情

答案 1 :(得分:0)

由于除法上的分母是浮点数,因此Python总是会将除法的结果提升为浮点数。

如果你想明确地将结果作为一个整数,不要促使任何运算符浮动,而是使用“//”运算符 - 它以“将来兼容”的方式阻止自动转换除法结果浮动。

d = (1 % phi)// e

答案 2 :(得分:-1)

它返回一个小数,因为你要除以浮点数

float(e)

您可以通过将整个计算包装在int()函数中来获取要转换为整数的最终数字,如下所示:

d = int( (1 mod phi)/float(e) )