练习题中是一些加解密小练习题,可以参考加解密小结1和加解密小结2中的特征对应进行加解密。可以利用工具。
RSA练习题:python脚本解RSA,脚本代码为(这里给出了p,q实际做题过程中是需要利用工具解p,q):
#!/usr/bin/env python
import gmpy
from Crypto.PublicKey import RSA
n = 41069065654959614597750207738698085798765257876378561837894254544512565197793
c = 27990707239527629138352696377606718299992092729307910015562504696905353450041
e = long(11)
p = 218538667198531171522213512860093810267
q = 187925853952657607512617865502535480179
d = long(gmpy.invert(e,(p-1)*(q-1)))
key = RSA.construct((n,e,d))
print key
print key.decrypt(c)
print hex(key.decrypt(c))
print hex(key.decrypt(c))[2:-1].decode('hex')
上面脚本中给出了p,q。做题过程中可以利用 yafu-1.34大数分解N 工具来求解p,q。解压后的文件为:
双击运行yafu-Win32.exe,用命令factor(N)来大数分解N
分解前,将factor.log中的内容清空。分解过程太快了,来不及截图,分解完成后,在factor.log中可以得到分解的p,q:
然后运行rsa脚本解题得:
红色部分即为flag,这里我是在kali中运行的脚本。
再来一道加解密的题,题目:
0x253464253534253435253335253433253661253435253737253464253531253666253738253464253434253637253462253466253534253662253462253464253534253435253738253433253661253435253737253466253531253666253738253464253434253435253462253464253534253435253332253433253661253435253738253464253531253666253738253464253534253535253462253464253534253431253330253433253661253435253737253465253531253666253738253464253661253435253462253466253534253633253462253464253534253435253737253433253661253662253334253433253661253662253333253433253661253435253738253465253431253364253364
编写python脚本:decode.py:
str='253464253534253435253335253433253661253435253737253464253531253666253738253464253434253637253462253466253534253662253462253464253534253435253738253433253661253435253737253466253531253666253738253464253434253435253462253464253534253435253332253433253661253435253738253464253531253666253738253464253534253535253462253464253534253431253330253433253661253435253737253465253531253666253738253464253661253435253462253466253534253633253462253464253534253435253737253433253661253662253334253433253661253662253333253433253661253435253738253465253431253364253364'
def HexDe(str):
decstr = ''
for i in range(0,len(str),2):
decstr +=chr(int(str[i:i + 2],16))
return decstr
print(HexDe(str))
运行得:
明显看出是url编码,利用工具解码:
解出的答案为:
MTE5CjEwMQoxMDgKOTkKMTExCjEwOQoxMDEKMTE2CjExMQoxMTUKMTA0CjEwNQoxMjEKOTcKMTEwCjk4Cjk3CjExNA==
base64解码之:
得到一串数字:119 101 108 99 111 109 101 116 111 115 104 105 121 97 110 98 97 114,然后ASCII转字符得:
得到:welcometoshiyanbar,即为flag。题目及工具。
再来看一个栅栏解码题目:Alice和Bob用栅栏密码传递了一个消息,解开它。cytgahicorporpysol
利用工具解得:
题目及工具。最后来上传一个密码学文档。题目资料汇总。
再来看一道RSA的题目,RSA2,是i春秋上的一道题目:https://www.ichunqiu.com/battalion,RSA256.下载附件内容为:
首先看到公钥文件public.key,放到kali,用openssl解出e、n,命令为:openssl rsa -pubin -text -modulus -in warmup -in public.key
可以得到e为:65537,n为16进制:D99E952296A6D960DFC2504ABA545B9442D60A7B9E930AFF451C78EC55D555EB
利用python,转换为10进制:98432079271513130981267919056149161631892822707167177858831841699521774310891
转换时要去掉结尾的L,L是表示长整型。然后利用工具yafu-1.34大数分解N,解得p,q:
有了n,e,p,q就可以利用下面脚本解出flag:
# encoding: utf-8
import gmpy2
import rsa
p = 302825536744096741518546212761194311477
q = 325045504186436346209877301320131277983
n = 98432079271513130981267919056149161631892822707167177858831841699521774310891
e = 65537
d = int(gmpy2.invert(e , (p-1) * (q-1)))
privatekey = rsa.PrivateKey(n , e , d , p , q) #根据已知参数,计算私钥
with open("encrypted.message1" , "rb") as f:
print(rsa.decrypt(f.read(), privatekey).decode()) #使用私钥对密文进行解密,并打印
with open("encrypted.message2" , "rb") as f:
print(rsa.decrypt(f.read(), privatekey).decode()) #使用私钥对密文进行解密,并打印
with open("encrypted.message3" , "rb") as f:
print(rsa.decrypt(f.read(), privatekey).decode()) #使用私钥对密文进行解密,并打印
这里把python代码文件和附件放在同一文件夹内。
解得flag:
注意:这里运行rsa2.py的代码需要gmpy2的库和rsa库,并且在文件头加上# encoding: utf-8是为了解决编码问题。
首先安装gmpy2库,:
1. 执行pip install gmpy2, 报错,提示 src/gmpy.h:252:20: fatal error: mpfr.h: 没有那个文件或目录
2. Google一下,找到了解决方案:
首先从 ftp://ftp.gnu.org/gnu/mpfr/ 下载最新的mpfr的压缩包,这里我下载的是 mpfr-3.1.5.zip
在Kali中执行以下命令:
unzip mpfr-3.1.5.zip (这里需要根据下载的压缩包所在的实际目录修改一下)
cd mpfr-3.1.5
./configure
make
make check
VERBOSE=1 make check
make install
如果以上过程中不报错的话,mpfr就安装好了。
本以为mpfr安装好就解决问题了,运行 pip install gmpy2 ,刚才的问题没有了,又出现了新的问题,缺少mpc.h头文件,如下图,Excuse me?
然后就有了第3步:
3. 从 ftp://gcc.gnu.org/pub/gcc/infrastructure/ 下载最新的mpc压缩包,这里我下载的是 mpc-1.0.3.tar.gz ,接着在 Kali 中执行以下命令:
tar -xzvf mpc-1.0.3.tar.gz (这里需要根据下载的压缩包所在的实际目录修改一下)
cd mpc-1.0.3
./configure
make
make install
若以上过程没报错,问题就已经解决,然后执行 pip install gmpy2 ,提示 gmpy2 安装成功,
但是在运行脚本时又报错,缺少libmpfr.so.4,解决办法:
locate libmpfr:
然后:gedit /etc/ld.so.conf,将上面的那些目录贴进去:
然后执行:ldconfig,ldconfig 命令主要是为了更新 /etc/ld.so.cache 文件,为了加快程序执行时对共享库的定位速度,避免使用收索路径查找共享库的低效率。
然后利用命令:pip install rsa 安装rsa库。然后就可以顺利运行rsa2脚本了。