一、
打开文件。可以看到下面两个文件,结合题目rsa。可知,pub.key里是rsa的公钥,flag.enc里面的是密文。
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成立
解密的过程就是求 n e d
参考:带你彻底理解RSA算法
二、
有公钥之后我们第一步要做的就是,解析公钥 可以通过在线工具解析
通过n算p、q
可以使用在线工具算素数factordb.com
p = 285960468890451637935629440372639283459 q = 304008741604601924494328155975272418463
写脚本前需要解决的问题
【windows下配置Python第三方库我一般在命令行使用easy_install.命令
例如下载rsa,只需要在命令行下输入命令:easy_install rsa即可。】
参考VSCode 自动导入包插件 Auto Import、安装gmpy2、RSA-tool
脚本如下
import gmpy2 import rsa e=65537 n=86934482296048119190666062003494800588905656017203025617216654058378322103517 p = 285960468890451637935629440372639283459 q = 304008741604601924494328155975272418463 phin=(q-1)*(p-1) d=gmpy2.invert(e,phin) key=rsa.PrivateKey(n,e,int(d),p,q) with open("D:\BaiduNetdiskDownload\BUUCTF\ras\output\flag.enc","rb+") as f: f=f.read() flag=rsa.decrypt(f,key) print(flag)
rsa解题脚本参考:https://blog.csdn.net/huanghelouzi/article/details/82974741
三、flag
flag{decrypt_256}