【python】不同版本python,内置函数pow的区别

传参格式

pow(baseexpmod=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)

C2^{^{S2}}modn=C2^{-S2}modn==\left({C2}^{-1}modn \right )^{S2}modn

3.8无须判断exp正负,写成如下即可

m =int(pow(c1,s1,n)*pow(c2,s2,n)%n) 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值