威尔逊定理:
有时候可以用这个结论来化简一些式子达到简化运算的目的。之前遇到过很多次,总结一下。
比如[长安杯 2021]checkin。
1 | from Crypto.Util.number import * |
1.由c1 = pow(2,e,n)得2^e-c1=kn,又由于q是一个16位的素数,所以可以直接枚举q进行分解。得到q以后,可以算出kp=kn//q。
2.分解kp(factor或者简单遍历)
3.求私钥d以后解出m,m和flag的关系为:
4.构造威尔逊定理的格式:
5.对结果求modp的逆得到flag
exp:
1 | from gmpy2 import * |