BUUCTF re rsa做法(提供enc和key)
首先我们需要安装个一些东西,即gmpy2,Linux安装流程如下
首先安装依赖库
gmp库:apt-get install libgmp-dev
mpfr库:apt-get install libmpfr-dev
mpc库:apt-get install libmpc-dev
安装gmpy2:pip install gmpy2
个别人可能会报错,输入:sudo apt-get install libmpc-de 进行依赖库更新和检查
首先对文件进行解压,得到 pub.key和flag.enc两个文件,第一步进行openssl的使用,从pub.key
文件中提取出数字n和e(后文会将讲sa算法原理)
输入:openssl rsa -pubin -text -modulus -in pub.key
得出e=6557,n=0xC0332C5C64AE47182F6C1C876D42336910545A58F7EEFEFC0BCAAF5AF341CCDD
我们此时需要将n变成十进制,利用python进行变化,得到
n=86934482296048119190666062003494800588905656017203025617216654058378322103517
然后将n拆成两个p和q,这边进入网站factordb.com进行拆分,得到
p=285960468890451637935629440372639283459
q=304008741604601924494328155975272418463
此后还需要下载一个rsatool工具,下载完之后,我们如下操作
先是cd rsatool进入该文件夹,然后输入
python3 rsatool.py -f PEM -o private.pem -p 285960468890451637935629440372639283459 -q 304008741604601924494328155975272418463 -e 65537
就可以得到一个私钥文件,后缀是pem,如下图所示
即为创建成功,最后将pub.key,flag.enc和private.pem放入rsatool文件夹中,
输入:openssl pkeyutl -decrypt -in flag.enc -inkey private.pem -out flag.txt
最后,输入:ls ,在输入:cat flag.txt 就能得到flag{decrypt_256}
先来个小总结:
当解压为两个附件时,一个为enc还有一个key,首先一段指令,得到e和n,然后再将n拆成p和q
然后生成一个pem文件,然后将这些文件放一起,最后得出flag.txt文件
RSA算法原理:(脚本解密原理)
信息接收方产生公钥pl和私钥sk,公钥可以给任何人,私钥自己保存
信息发送方将要发送的信息m和公钥pk一起用特定的算法进行加密,即密文
信息接收方接收到密文c,用私钥sk进行特定的解密算法回复明文
RSA算法流程
选择两个质数p和q,算出乘积n=p*q,算出对应的欧拉函数
选择一个e,使其与算出来的欧拉函数对应
e,n为公钥,d,n为私钥,明文长度小于n
加密,密文=pow(m,e)%n
解密,明文=pow(c,d)%n
如何辨别rsa算法呢?
在加密函数中看是否出现pow(a,b)%c
解法
找密文c
找n=p*q,
找到公钥e
解密操作