蓝鲸安全CTF打卡题——第一期密码学 (2)

我们由以上的分析可以写出脚本:

import binascii _ = 1 __ = 2 ___ = 3 ____ = 4 _____ = 5 ______ = 6 _______ = 7 ________ = 8 _________ = 9 a = _____*((__//__+___+______-____%____)**((___%(___-_))+________+(___%___+_____+_______%__+______-(______//(_____%___)))))+__*(((________/__)+___%__+_______-(________//____))**(_*(_____+_____)+_______+_________%___))+________*(((_________//__+________%__)+(_______-_))**((___+_______)+_________-(______//__)))+_______*((___+_________-(______//___-_______%__%_))**(_____+_____+_____))+__*(__+_________-(___//___-_________%_____%__))**(_________-____+_______)+(___+_______)**(________%___%__+_____+______)+(_____-__)*((____//____-_____%____%_)+_________)**(_____-(_______//_______+_________%___)+______)+(_____+(_________%_______)*__+_)**_________+_______*(((_________%_______)*__+_______-(________//________))**_______)+(________/__)*(((____-_+_______)*(______+____))**___)+___*((__+_________-_)**_____)+___*(((___+_______-______/___+__-_________%_____%__)*(___-_+________/__+_________%_____))**__)+(_//_)*(((________%___%__+_____+_____)%______)+_______-_)**___+_____*((______/(_____%___))+_______)*((_________%_______)*__+_____+_)+___//___+_________+_________/___ a = hex(a)[2:][:-1] a = binascii.a2b_hex(a) print a

运行之后就会得到:

蓝鲸安全CTF打卡题——第一期密码学

最后得到答案:key{I_4m-k3y}

六:RSA破解

蓝鲸安全CTF打卡题——第一期密码学

知识点

RSA模数分解,RSA解密 openssl使用方法

解题思路

下载并打开压缩包文件就会发现:

这是一个加密的flag文件和公钥文件 我们先通过openssl来分析一下公钥是否可以被攻击

使用linux,其中的命令是:

openssl rsa -pubin -text -modulus -in public.pem

蓝鲸安全CTF打卡题——第一期密码学

我们接着使用msieve就可以了

蓝鲸安全CTF打卡题——第一期密码学

就会得到相应的P Q

我们需要使用脚本生成使用文件

import math import sys from Crypto.PublicKey import RSA keypair = RSA.generate(1024) keypair.p = 290579950064240059571837821251441436997 keypair.q = 314436328879392457343835667929324128609 keypair.e = 65537 keypair.n = keypair.p * keypair.q Qn = long((keypair.p-1) * (keypair.q-1)) i = 1 while (True): x = (Qn * i ) + 1 if (x % keypair.e == 0): keypair.d = x / keypair.e break i += 1 private = open('private.pem','w') private.write(keypair.exportKey()) private.close()

使用linux运行脚本很简单 进入文件直接使用命令:

python prikeygen.py

就会生成相应的私钥

-----BEGIN RSA PRIVATE KEY----- MIGpAgEAAiEAygD17Xszub1CHncxiqF4513t48sbx9R6fRQ750kckCUCAwEAAQIg XbBsX6TQrMj2raKiu6WAqRtv86ps6lbgXsftak7iqgECEQDam6mnJeZJM1o5QlZY XKlFAhEA7I478Iv1HnDUJ/xGsCkJYQIQFvqv7bMNLvqn7Ebt3qH25QIQFwZlKS3G Rxc+X0H782ubIQIQL2kzJ1i8luHD5eQlbYjXgg== -----END RSA PRIVATE KEY-----

接下来就是需要使用openssl命令了

蓝鲸安全CTF打卡题——第一期密码学

就会得到答案:whalectf{256_n_get}

参考资料:

RSA算法原理(一):

RSA算法原理(二):

CTF中那些脑洞大开的编码和加密: https://www.tuicool.com/articles/2E3INnm

UTF-9: https://github.com/enricobacis/utf9

CTF中RSA的常见攻击方法 : https://www.anquanke.com/post/id/84632

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpsgdf.html