我有两个号码p
和q
。我知道我可以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
应该是一个整数。我做错了什么?
答案 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_inverse或https://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) )