第五周学习笔记
1.安装pycharm,python调库实现base64加解密。
2.完成ctfshow中crypto模块前5题。
python实现Base64加解密
加密
使用python实现base64加密需要使用base64库
首先输入需要加密的内容
然后对输入内容进行编码,通过encode函数实现
使用base64.b64encode()函数进行加密。
import base64
a = input("Enter")
c = a.encode("utf-8")#编码
b = base64.b64encode(c)#加密
print(b)
示例:
若要去除b' '
框,只需将print(b)
改为print(str(b, 'utf-8'))
使用浏览器在线解码工具测试
结果正确,加密成功。
解密
加密的逆过程
先对密文使用base64.b64decode()函数进行解密,得到原文的16进制编码
对编码进行utf-8解码,就得到了原文。
import base64
a = input("输入密文:")
b = base64.b64decode(a)
c = b.decode("utf-8")
print(c)
示例:
解码成功。
ctfshow中crypto
第一题
由题可知,需要将密文进行反向排序。
直接将密文反向输入即可解出答案。
第二题
打开密文后看到密文仅由[]()!+
组成。
查询资料后可知该加密方式符合jsfuck加密特征。
使用在线解码工具进行解码
即可得到答案。
第三题
再网页打开文件后得到一堆中文乱码,下载.txr文件后再次打开
可以看到由颜文字构成的密文。
查资料可知为AAencode加密法,使用在线解密网站进行解密。
即可得到答案。
第四题
该题涉及到rsa加密算法。p,q为两个大质数,e为公钥,d为私钥。
没有找到在线根据p、q、e直接生成d的网站,在了解rsa原理后使用py来求d。
import gmpy2
p = 447685307
q = 2037
e = 17
N = p*q
N2 = (p-1)*(q-1)
d = gmpy2.invert(e, N2)
print(d)
N用于对明文加密,N2为N的欧拉函数。
程序中使用了gmpy2库中的invert函数来求逆元,结果即为私钥d。
得到d
输入答案后结果正确。
第五题
本题中
c为密文,我们需要先根据p、q、e求出私钥d,然后对密文进行解密。
私钥与上题一致,为 53616899001
明文是密文的D次方后除以N后的余数。
使用gmpy2库中的powmod函数对密文进行求解
import gmpy2
p = 447685307
q = 2037
e = 17
c = 704796792
N = p * q
N2 = (p - 1) * (q - 1)
d = gmpy2.invert(e, N2)
m = gmpy2.powmod(c, d, N)
print(m)
答案正确。