AES.MODE_CBC
1.KEY:16位或16位倍数字节
2.IV:16位或16位倍数字节
3.CBC:加密解密都需要创建aes对象
程序运行流程
def main():
while True:
s = input('加密输入e,解密输入d,结束输入q:').strip()
if s == 'e':
en_code()
elif s == 'd':
de_code()
elif s == 'q':
break
if __name__ == '__main__':
main()
加密
def en_code():
s = input('请输入加密明文:').strip()
# 对明文编码
s_utf = s.encode('utf-8')
# 计算编码后的明文长度,缺多少位
le = len(s_utf)
n = le % 16
m = (16 - n)
# 将明文补齐,补齐方式是应该是zeropadding
s_utf_b = s_utf + b'\x00' * m
iv = b'asd15sd48sd78weq'
key = b'123asd456qwe789r'
# 创建aes对象
aes = AES.new(key, AES.MODE_CBC, iv)
# aes加密
s_encrypt = aes.encrypt(s_utf_b)
# 对aes加密后的密文进行base64编码,然后再用utf-8解码,其实这个地方无论什么解码都行
s_b64 = base64.encodebytes(s_encrypt).decode()
print(s_b64)
# 将明文密文保存在工作目录1.txt文件中
with open('1.txt', 'a', encoding='utf-8') as f:
f.write('明文:' + s + '\n')
f.write('密文:' + s_b64)
解密
def de_code():
s = input('请输入解密密文:').strip()
# 先编码
s_utf = s.encode()
# base64解码
s_b64 = base64.decodebytes(s_utf)
iv = b'asd15sd48sd78weq'
key = b'123asd456qwe789r'
# 获取aes对象
aes = AES.new(key, AES.MODE_CBC, iv)
# aes解码
s_dencrypt = aes.decrypt(s_b64)
# 因为明文的utf-8编码曾经用\x00补全过,所以要去掉补全的\x00
s_dencrypt = s_dencrypt.replace(b'\x00', b'')
# 最后utf-8解码
s_decode = s_dencrypt.decode('utf-8')
print(s_decode)
# 把密文和解密的明文保存在1.txt文件里面
with open('1.txt', 'a', encoding='utf-8') as f:
f.write('密文:' + s + '\n')
f.write('明文:' + s_decode + '\n')
f.write('\n')
完整代码
from Crypto.Cipher import AES
import base64
def en_code():
s = input('请输入加密明文:').strip()
s_utf = s.encode('utf-8')
le = len(s_utf)
n = le % 16
m = (16 - n)
s_utf_b = s_utf + b'\x00' * m
iv = b'asd15sd48sd78weq'
key = b'123asd456qwe789r'
aes = AES.new(key, AES.MODE_CBC, iv)
s_encrypt = aes.encrypt(s_utf_b)
s_b64 = base64.encodebytes(s_encrypt).decode()
print(s_b64)
with open('1.txt', 'a', encoding='utf-8') as f:
f.write('明文:' + s + '\n')
f.write('密文:' + s_b64)
def de_code():
s = input('请输入解密密文:').strip()
s_utf = s.encode()
s_b64 = base64.decodebytes(s_utf)
iv = b'asd15sd48sd78weq'
key = b'123asd456qwe789r'
aes = AES.new(key, AES.MODE_CBC, iv)
s_dencrypt = aes.decrypt(s_b64)
s_dencrypt = s_dencrypt.replace(b'\x00', b'')
s_decode = s_dencrypt.decode('utf-8')
print(s_decode)
with open('1.txt', 'a', encoding='utf-8') as f:
f.write('密文:' + s + '\n')
f.write('明文:' + s_decode + '\n')
f.write('\n')
def main():
while True:
s = input('加密输入e,解密输入d,结束输入q:').strip()
if s == 'e':
en_code()
elif s == 'd':
de_code()
elif s == 'q':
break
if __name__ == '__main__':
main()