前言

之前写过一篇aes的加密文章,当时的写法还不太成熟,后续参考了另一个博主的博客后恍然大悟。在此附上地址​

编码

#AES-demo

import base64
from Crypto.Cipher import AES

'''
采用AES对称加密算法
'''
# str不是16的倍数那就补足为16的倍数
def add_to_16(value):
while len(value) % 16 != 0:
value += '\0'
return str.encode(value) # 返回bytes
#加密方法
def encrypt_oracle():
# 秘钥
key = '123456'
# 待加密文本
text = 'abc123def456'
# 初始化加密器
aes = AES.new(add_to_16(key), AES.MODE_ECB)
#先进行aes加密
encrypt_aes = aes.encrypt(add_to_16(text))
#用base64转成字符串形式
encrypted_text = str(base64.encodebytes(encrypt_aes), encoding='utf-8') # 执行加密并转码返回bytes
print(encrypted_text)
# base64会存在\n的情况,转码会出现深坑。改为如下:
return encrypted_text.replace("\n","")
#解密方法
def decrypt_oralce():
# 秘钥
key = '123456'
# 密文
text = 'qR/TQk4INsWeXdMSbCDDdA=='
# 初始化加密器
aes = AES.new(add_to_16(key), AES.MODE_ECB)
#优先逆向解密base64成bytes
base64_decrypted = base64.decodebytes(text.encode(encoding='utf-8'))
#执行解密密并转码返回str
decrypted_text = str(aes.decrypt(base64_decrypted),encoding='utf-8').replace('\0','')
print(decrypted_text)

if __name__ == '__main__':
# encrypt_oracle()
decrypt_oralce()

总结

大体思想依旧没有变,用pyCryptodome模块带的aes先将秘钥,以及要加密的文本填充为16位,随后对aes产生的字节码进行base64位编码,转为字符串的形式即可,解密思想逆过来即可。先逆向解密base64成bytes,执行解密密并转码返回str,将多余位数的’\0’替换为空