传参格式
pow(base, exp, mod=None)
3.8以前,pow不支持三参数下,第二参数为负数
3.8以后,支持三参数下,第二参数为负数,即计算base**exp关于mod的乘法逆元。
示例:
>>> pow(2,-1,5)
3
>>> pow(2,-2,5)
4
>>> pow(2,-3,5)
2
>>> pow(2,-4,5)
1
部分rsa共模攻击使用的函数可能为3.8之前的python版本函数
可见其计算s1,s2时需要判断正负并做调整
def rsa_gong_N_def(e1, e2, c1, c2, n):
e1, e2, c1, c2, n = int(e1), int(e2), int(c1), int(c2), int(n)
s = gmpy2.gcdext(e1, e2) # 扩展欧几里得算法
s1 = s[1]
s2 = s[2]
if s1 < 0:
s1 = - s1
c1 = gmpy2.invert(c1, n)
elif s2 < 0:
s2 = - s2
c2 = gmpy2.invert(c2, n)
m = pow(c1, s1) * pow(c2, s2) % n # m=(m^7)%n
return int(m)
3.8无须判断exp正负,写成如下即可
m =int(pow(c1,s1,n)*pow(c2,s2,n)%n)