stfshow五道题
easyrsa1

因为m=pow(c,d,n) 所以我们要先把d给搞出来。而d是e和φn的逆元,所以要求出φn,而φn=(p-1)*(q-1),那么我们最后回到求p和q的问题上来。
用factordb.com这个网站可以输入n的值求出p和q的值。

p=1201147059438530786835365194567 q=1212112637077862917192191913841
然后我们就可以算出φn并求出d,最后得到明文m了

m=584734024210318745406046669953309948776602881661
然后换成字符

flag{fact0r_sma11_N}
easyrsa2

这道题n不互素
因为n1=p1*q n2=p2*q,所以n1和n2的最大公约数就是q,
q=gmpy2.gcd(n1,n2)
求出q后进一步可以求得p1和p2,然后方法同上一道题。在最后那里加上这个可不让输出的时候没有前面那个b''
.decode()

要注意的是,求p1的时候一定要用p1=n1//q而不是p1=n1/q,因为虽然能被整除,但是后者的p1不是int类型,会出事。
经过我的实验,发现不一定非要求出p2等元素,解密结果是一样的。
easyrsa3

同一个n,不同的e,共模攻击!
说实话我不太懂这个是啥,照着做出来的
s1,s2,s3=gmpy2.gcdext(e1,e2)
这一步为啥前面有三个元素,扩展欧几里得算法不是只能得到两个数吗

easyrsa4

看似和第一题做法一样,仔细一看e很小,n非常大,那么就是低加密指数攻击
1.当m³<n时,c = m³,直接将c开三次方即可得到m;
2.当m³> n时,c= m³-i* n,只要找到i,使得c +i*n能够开三次方即可得到m。

easyrsa5

e过大,是低解密攻击
看大佬调用这个函数可以得到d
import owiener
d=owiener.attack(e,n)

Python学习笔记




凯撒密码源码分析

博客讲述了RSA加密算法的原理及破解方法,包括利用欧几里得算法求解d,使用factordb.com分解大素数,以及应对低加密指数和大e值的攻击策略。还提到了Python库gmpy2和owiener库在解密过程中的应用。
626

被折叠的 条评论
为什么被折叠?



