注:(不求甚解的)攻击原理 以及(浅层的)算法解释已在图片中给出;文字部分主要讲一些python语法的东西。
代码需要库 gmpy2和libnum;加密算法还需要Crypto.Util.number .
gcdext(a,b)扩欧 ;;pow(a,b,c)将a的b次方对c取模
注意使用gmpy2大整数类“mpz”来规避"ValueError: pow() 2nd argument cannot be negative when 3rd argument specified"报错
invert(a,n) 求解a在模n下的逆元
isqrt大整数平方根;(iroot以后遇到再介绍)
list,map 见了都能看懂;如果遇到相关的方法查一下就行了
[::-1] [0:i]都是slice notation写法,对list使用;前者表示倒序遍历全部,后者表示正序遍历0到i。
对此,更多可见 https://www.cnblogs.com/mapone/p/12128825.html