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

Python 从'p'和'q'(RSA)以编程方式生成'd',python,encryption,rsa,public-key-encryption,Python,Encryption,Rsa,Public Key Encryption,我有两个数字,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应该是一个整数。我做错了什么 编辑:我可能只是不理解RSA。现在,我正在看这一页:它返回一个十进制,因为你正在除以一个浮点数 float(e) 通过将整个计算包装在int()

我有两个数字,
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
应该是一个整数。我做错了什么


编辑:我可能只是不理解RSA。现在,我正在看这一页:

它返回一个十进制,因为你正在除以一个浮点数

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

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

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

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

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

由于除法上的dnominator是一个float,Python总是将除法的结果提升为float

如果要明确地将结果作为整数,请不要将任何运算符提升为浮点,而是使用“/”运算符-它以“未来兼容”的方式防止将除法结果自动转换为浮点


d=(1%phi)//e

由于除法上的dnominator是一个浮点数,Python总是将除法的结果提升为浮点数

如果要明确地将结果作为整数,请不要将任何运算符提升为浮点,而是使用“/”运算符-它以“未来兼容”的方式防止将除法结果自动转换为浮点


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

≡ 1(模数φ)

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

>>> (e*d) % phi
1
例如,如果φ=(7-1)(11-1)=60,e=17,那么如果我们选择d=53,那么我们将得到

>>> e = 17
>>> d = 53
>>> phi = 60
>>> (e*d) % phi
1
我们称d为e的模乘逆


为了从e和φ生成d,通常使用扩展的欧几里德算法。请阅读或获取更多信息

您对数学的理解是错误的。方程式

≡ 1(模数φ)

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

>>> (e*d) % phi
1
例如,如果φ=(7-1)(11-1)=60,e=17,那么如果我们选择d=53,那么我们将得到

>>> e = 17
>>> d = 53
>>> phi = 60
>>> (e*d) % phi
1
我们称d为e的模乘逆


为了从e和φ生成d,通常使用扩展的欧几里德算法。请阅读或获取更多信息

(1模式phi)
?这不是有效的Python-你的意思是
(1%phi)
?@jsbueno我很抱歉,是的。我打错了。@Teknolagi:你可以随时编辑你的问题。:)<代码>(1模式phi)?这不是有效的Python-你的意思是
(1%phi)
?@jsbueno我很抱歉,是的。我打错了。@Teknolagi:你可以随时编辑你的问题。:)这将是
0
,因为
1%big\u number==1
,然后
int(1/other number)==0
,这将是
0
,因为
1%big\u number==1
,然后
int(1/other number)==0
,所以如果我理解了这一点,那么我必须找到
gcd(e,phi,对吗?我得到了
1L
-这是什么意思?@Teknolagi:一个值为1的长整数。(你可以发布一个新问题。)@GregS
pow
的第三个参数是什么?我之前的评论是错误的(现在被删除)。如果使用欧几里德算法,则只能得到1L。错误的算法。你需要使用。因此,如果我理解这一点,那么我必须找到
gcd(e,phi)
,对吗?我得到
1L
-这是什么意思?@tekknolagi:一个值为1的长整数。(你可以发布一个新问题。)@GregS
pow
的第三个参数是什么?我之前的评论是错误的(现在被删除)。如果使用欧几里德算法,则只能得到1L。错误的算法。你需要使用。