Buuctf-rsa
前言:rsa加密确实是很有名。但这应该是密码学范畴吧?
公钥n = p * q,其中p和q是两个大素数
e是随机选择的数,作为公钥
d是跟e有关的一个数,满足条件式:ed=1(mod phi(n))
phi(n)是欧拉函数,phi(n)=(p-1)(q-1)
加密过程:设明文为m,密文为c
c = m^e(mod n)
解密过程:
m=c^d (mod n)
RSA密钥体制中,n和e作为公钥,是都可以得到的值;d作为私钥,是私人拥有的
要破解RSA,最常用的方法是大素数分解,即:找到p和q,使得n=p*q成立
1.
下载来文件有两个,flag.enc和pub.key。
用UE打开pub.key后,会转换里面的十六进制,得
1 | -----BEGIN PUBLIC KEY----- |
2.
然后将公钥进行分析,提取n,e
key长度: | 256 |
---|---|
模数: | C0332C5C64AE47182F6C1C876D42336910545A58F7EEFEFC0BCAAF5AF341CCDD |
指数: | 65537 (0x10001) |
借助了在线解密工具
即e=65537
n=86934482296048119190666062003494800588905656017203025617216654058378322103517(十进制)
3.
再通过n解析p,q
这里也是借助在线工具 地址
得出
p = 285960468890451637935629440372639283459
q = 304008741604601924494328155975272418463
4.
再用脚本解密flag.enc
1 | import gmpy2 |
5.
得到flag:flag{decrypt_256} 搞定!
不过这道题,只能算是拓展阅历吧。