-
-
[原创]新手小白的ctf记录:攻防世界-初识RSA
-
发表于: 2023-12-6 10:25 3607
-
新手小白的ctf记录
1、RSA了解学习
RSA官方定义:
RSA算法是一种非对称加密算法,与对称加密算法不同的是,RSA算法有两个不同的密钥,一个是公钥,一个是私钥。
RSA计算方法和所有字母含义:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | m:明文 n:加解密因素之一 n的算法: 1 、随机两个质数p和q 2 、p * q = n,n的二进制位数就是密钥位数 3 、计算n的欧拉函数φ(n),φ(n) = (p - 1 )(p + 1 ) e:公钥因素之一 e的算法: e为整数,取值范围为 1 <e<φ(n),且e与φ(n)互质,在范围随机一个数 d:私钥因素之一 d的算法: d为整数,ed / φ(n) = 1 转化为ed = 1 (modφ(n)) 其中e、n为公钥;d、n为私钥 加密方式:将明文m进行比特串分组(二进制),使每组的比特串十进制不大于n,对每组通过c^e mod(n) = c 进行加密,计算出密文c,且 0 < = c<n 解密方式: 0 < = c<n, m = c^d mod(n) |
靶场:攻防世界
题目名称:初识RSA
难度:1
题目如下:
RSA初级解题思路:
1 2 3 4 5 | 一般给出pq和qp,pq = p * (q - 1 ) qp = q * (p - 1 ) A = φ(n) = pq * qp / / n d = inverse(e,A) 反函数 m(明文) = pow (c,d,n) 输出通过 int 或者long_to_bytes进行整数转化 |
在网上找到的代码脚本如下:
注:该脚本使用python2,python3的Crypto模块有点问题,目前我的环境原因,暂时没解决。
该脚本引用于这个帖子,有兴趣可以去看一下:https://blog.csdn.net/m0_74897671/article/details/130068056
1 2 3 4 5 6 7 8 9 10 11 12 | import gmpy2 from Crypto.Util.number import * c = 8722269075970644434253339592758512788160408912707387632591552130175707843950684315083250494010055435391879036285103810263591951437829414438640307561645721347859659807138051841516634704123100270651976676182059252251162982609391666023674158274992400910869692389001622774140191223807887675081808561012755545464977015973615407965906513878979919700065923364884766974187303774330319143647840846354404070430118235352622445115153298578370521811697710289716188726587743282814946239856766713516166990341116198180068191759095913957606379780234116317390622824096667107736103270907349927467971817639795094030622157581511033950777 n = 10466186506773626671397261081802640650185744558208505628349249045496105597268556020207175016523119333667851114848452038431498926527983706092607207796937431312520131882751891731564121558651246025754915145600686076505962750195353958781726515647847167067621799990588328894365930423844435964506372428647802381074584935050067254029262890188260006596141011807724688556673520261743199388391094490191001701011230322653422314758778116196105077883955436582364267530633358016652912054880813710531145973799193443828969535902856467548523653920307742364119002349899553478815101092655897400295925170383678499125295006364960124859003 pq = 10466186506773626671397261081802640650185744558208505628349249045496105597268556020207175016523119333667851114848452038431498926527983706092607207796937431312520131882751891731564121558651246025754915145600686076505962750195353958781726515647847167067621799990588328894365930423844435964506372428647802381074488896197029704465200125337817646702009123916866455067019234171839614862660036737875747177391796376553159880972782837853473250804807544086701088829096838316550146794766718580877976153967582795248676367265069623900208276878140709691073369415161936376086988069213820933152601453587292943483693378833664901178324 qp = 10466186506773626671397261081802640650185744558208505628349249045496105597268556020207175016523119333667851114848452038431498926527983706092607207796937431312520131882751891731564121558651246025754915145600686076505962750195353958781726515647847167067621799990588328894365930423844435964506372428647802381074475956379708898904933143429835002718457573266164923043251954374464149976302585916538814746811455883837138715445492053610047383292461097590195481556557381952895539341802954749542143253491617052100969586396996063822508764438280468492894012685918249843558593322831683872737943676955669923498182824352081785243246 A = qp * pq / / n e = 65537 d = inverse(e,A) m = pow (c,d,n) print (long_to_bytes(m)) |
运行肯呢个会少模块,少什么pip安装什么就行,运行出来就是flag
赞赏记录
参与人
雪币
留言
时间
mb_qaryoyxt
为你点赞~
2024-3-27 18:04
wx_鉲佈奇喏
为你点赞~
2024-1-16 15:07
森光暖树
为你点赞~
2023-12-6 10:26
赞赏
看原图
赞赏
雪币:
留言: