20190422做题总结
1. RSA2
首先对pubkey.pem进行信息提取
1 | openssl rsa -pubin -text -modulus -in pubkey.pem |
得到n和e
对n在http://factordb.com/进行在线分解,得p,q![Imgur](https://i.imgur.com/nog6NnU.png)
此时已知p,q,e即可得到d为
1 | # coding = utf-8 |
运行结果如下
此时d已知,即可对flag.encrypt这一密文先进行读取:
1 | >>f = open('flag.encrypt') |
即可看到密文内容,接着对密文内容进行16进制编码:
1 | >>p.encode('hex') |
就得到它16进制的形式:8fbb3b0f58b88b53e79d85c1ed68c355ac57c75884bd1e8e21c7ae9c6c82ddbb
在转换为字符串,即为c:
1 | >>c=0x8fbb3b0f58b88b53e79d85c1ed68c355ac57c75884bd1e8e21c7ae9c6c82ddbb |
现在利用公式pow(c,d,n)就可以得到明文十进制形式
1 | >>d = 10866948760844599168252082612378495977388271279679231539839049698621994994673 |
十进制形式无法进行编码,故要转换为16进制,利用hex:
1 | >>pp = 10786438895796771334553405582542071004794259807619608563847580041597 |
最后解密可得flag:
1 | >>s='666c61677b5930755f6d34795f754e6433727374616e645f5253417d' |
Wiener Tricky
首先同上对rsa_pub.pem进行信息提取,再对n进行分解,发现n太大无法分解。根据题目,可知要采取维纳攻击,在网上查找到相关的代码,https://github.com/pablocelayes/rsa-wiener-attack 后下载所有代码于桌面,运行程序可得解密密钥d:
接下来步骤同上题,提取flag.enc文件内容
进行16进制编码,再转为10进制c:
现已知c,d,n,即可求明文pp:
将明文变为16进制后在解密即得flag
但这时发现报错TypeError: Odd-length string