BUUCTF--rsa
文件分析
第一次遇到这种题,不过看到题目知道这是一个rsa解密题。
公钥n = p * q,其中p和q是两个大素数
e是随机选择的数,作为公钥
d是跟e有关的一个数,满足条件式:ed=1(mod phi(n))
phi(n)是欧拉函数,phi(n)=(p-1)(q-1)
转自:https://blog.csdn.net/kevin66654/article/details/54087647
pub.key是公钥,flag.enc是rsa加密后的文件,因此我们只要通过公钥文件解析出n,e,p,q,d,再利用脚本解密rsa加密文件。
公钥处理
提取公钥
IDA打开pub.key后,转换里面的十六进制为字符串,提取出公钥。
-----BEGIN PUBLIC KEY-----
MDwwDQYJKoZIhvcNAQEBBQADKwAwKAIhAMAzLFxkrkcYL2wch21CM2kQVFpY9++
/AvKr1rzQczdAgMBAAE=
-----END PUBLIC KEY-----
公钥解析(提取e,n)
在http://tool.chacuo.net/cryptrsakeyparse对公钥进行解析
公钥指数及模数信息:
key长度: | 256 |
模数: | C0332C5C64AE47182F6C1C876D42336910545A58F7EEFEFC0BCAAF5AF341CCDD |
指数: | 65537 (0x10001) |
获取到
e = 65537
n=86934482296048119190666062003494800588905656017203025617216654058378322103517(模数转换为十进制)
公钥解析(提取p,q)
使用yahu或者http://www.factordb.com/index.php?query=86934482296048119190666062003494800588905656017203025617216654058378322103517 通过n解析p,q
p = 285960468890451637935629440372639283459
q = 304008741604601924494328155975272418463
脚本解密
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("C:\\Users\\10245\\Desktop\\output\\flag.enc", "rb+") as f:
f = f.read()
print(rsa.decrypt(f, key))
get flag!
flag{decrypt_256}
想要详细了解CTF中的rsa,可以看看https://err0rzz.github.io/2017/11/14/CTF%E4%B8%ADRSA%E5%A5%97%E8%B7%AF/
最新文章
- C++ 为什么拷贝构造函数参数必须为引用?赋值构造函数参数也必须为引用吗?
- nginx使用ssl模块配置支持HTTPS访问
- Android 四大组件之二(Service)
- Codeforces Round #188 (Div. 2) A. Even Odds 水题
- li 水平排列并自动填满 ul
- linux 修改IP, DNS 命令
- OSG+Python
- FACE++学习二、获得face属性
- es6 箭头函数(arrow function) 学习笔记
- 分布式计算框架Gearman原理详解
- ThinkPHP表单自动验证(注册功能)
- ecplise里的run as里只有run configurations是怎么回事?
- [PowerShell Utils] Remotely install Hyper-V and Failover Cluster feature on a list of windows 2012 servers
- oracle三大范式(转载)
- 洛谷P2216 理想的正方形
- 谁有stanford ner训练语料
- SNMP Introduction
- 寒武纪-1005 Travel(树形DP)
- linux 下线程错误查找,与线程分析命令
- 一个经典的PHP加密解密算法authcode
热门文章
- Math.min() Math.max() Math.min().apply() Math.max() .apply()该如何使用???
- apicloud直接上传图片
- 特征提取算法(3)——SIFT特征提取算子
- vue-cli3取消eslint
- (23)C++/Python项目练习一
- Python 元组遍历排序操作方法
- 微信小程序之登录用户不是该小程序的开发者
- 关于Java泛型实现原理的思考与一般用法示例总结
- matlab 重命名文件和文件夹
- Linux驱动开发3——devfs udev procfs sysfs debugfs傻傻地分不清楚