题目描述:
题目分析:
- 翻译一下可知:
前提:用0、1、2、……枚举字母表25
使用RSA系统
加密:0156 0821 1616 0041 0140 2130 1616 0793
公钥:2537和13
私钥:2537和937
- 从提示可以得知 n = 2537 , e = 13 , d = 937
- 分解 n ,可知 p = 43 , q = 59
- 做过 buu RSAROLL 1 便可知道此题大致考的什么
- 里面的 “ 0156 0821 1616 0041 0140 2130 1616 0793 ” 即是 c ,只不过是多个 c ,将解出来的明文拼接在一起便可得到 flag
- 代码如下:
a = 'abcdefghigklmnopqrstuvwxyz'
p = 43
q = 59
e = 13
d = 937
c = '0156 0821 1616 0041 0140 2130 1616 0793'.split(' ')
flag = ''
n = p*q
for i in c:
flag += a[pow(int(i),d,n)]
print(flag)
- 得到 flag{iloveyou}
收获与体会:
- 此题有一个特殊之处,即里面的 c , e , n 都很小,很反常!
- 如果按 buu RSAROLL 1 这道题来写的话,得不到答案,因为打印 pow(int(i),d,n) 后会得到
8
11
14
21
4
24
14
20
一串很小的数字,对应ascii码后会得到一些 特别的东西,没有字母也没有数字
- 所以就会想到可能是按照26个字母表进行转换,位置一一对应即可转化成功得到 flag
- 所以数字在1~26之间就转字母便,大于26就转 ascii 码