1.ACTF 2020 RSA0
给了提示:怎么办呢,出题人也太坏了,竟然把压缩包给伪加密了!
搜索有关zip伪加密的知识,下载WinHex,打开zip文件
有关知识参考:zip伪加密知识点 - 知乎 (zhihu.com)zip伪加密做法及原理 - 未完成的歌QAQ - 博客园 (cnblogs.com)
找到"PK"(记得要找全!!考验眼神的时候到了)
(这里的话未必要改成0000,只要末位是偶数即可)
然后打开文件直接解明文就好
2. NCTF babyrsa
题目中说p,q是相邻的素数,然后给了d,e和c
这里其实是用爆破得到phin,由于p,q相差过小,所以可以看作是phin = (p - 1) * (q - 1)开方后得到的整数前后的两个素数
其中p = getPrime(1024),返回一个随机的1024位质数(这里的1024位指的是二进制)
通过简单举例可以看出,输出的十进制数刚好在2 ^ (n - 1)和2 ^ n 之间,所以p,q均在2 ^ 1023到2 ^ 1024之间,所以phin最短为2047位(二进制,这里简单举例运算一下也可以看出来)
from Crypto.Util.number import *
a = getPrime(11)
print(a)
>>1283
b = getPrime(6)
print(b)
>>59
e * d - 1共2064位(减去0b)
由 e * d = 1 mod phin 得到 e * d = k * phin + 1,所以k最长17位,而2 ^ 16是17位,所以k在2 ^ 15—— 2 ^ 16之间取值即可
from Crypto.Util.number import *
from gmpy2 import *
from sympy import nextprime, prevprime
e = 0x10001
d = 1927577894603789971803545543817550917572391146612746215450691656410151992360330890033142760198347688625584920033237408199644297630705859739088116815586223853301862194473