Python 实现 AES 加密 进行 PKCS5Padding 的填充 [ 奇巧淫技 ]
大数据男孩 文章 正文
明妃
{{nature("2022-08-14 17:23:14")}}更新[]()
0x00 Python 需要导入的模块
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
from binascii import b2a_hex, a2b_hex
0x01 AES加密代码
def AES_encrypt(secret_key,data):
"""
:param secret_key [str] : 加密秘钥
:param data [str] : 需要加密数据
:return [str] :
"""
BLOCK_SIZE = 16 # Bytes
# 数据进行 PKCS5Padding 的填充
raw = pad(str(data), BLOCK_SIZE)
# 通过key值,使用ECB模式进行加密
cipher = AES.new(secret_key.encode(), AES.MODE_ECB)
# 得到加密后的字节码
encrypted_text = cipher.encrypt(bytes(raw, encoding='utf-8'))
# 字节码转换成十六进制 再转成 字符串
encrypted_text_hex = str(b2a_hex(encrypted_text), encoding='utf-8')
return encrypted_text_hex
0x02 AES解密代码
def AES_decrypt(secret_key,encrypted_text_hex):
"""
:param secret_key [str] : 加密秘钥
:param encrypted_text_hex [str]: # 加密后的 data 字符串
:return [str]:
"""
# 去掉 PKCS5Padding 的填充
unpad = lambda s: s[:-ord(s[len(s) - 1:])]
# 通过 key 值进行
cipher = AES.new(secret_key.encode(), AES.MODE_ECB)
data_response = unpad(cipher.decrypt(a2b_hex(encrypted_text_hex))).decode('utf8')
return data_response
0x03 测试代码
secret_key="z1s4d5e4rt5g4h5y" # 秘钥 (需要16位)
dataEncrypt=AES_encrypt(secret_key,"123456789") # 加密
print(dataEncrypt) # 打印加密后的数据
data=AES_decrypt(secret_key,dataEncrypt) # 解密
print(data) # 打印解密后的数据
0x04 测试结果
# 测试结果
8f0eddc4bd5f22006087afcfa6e18e6e
123456789
{{nature('2020-01-02 16:47:07')}} {{format('12641')}}人已阅读
{{nature('2019-12-11 20:43:10')}} {{format('9527')}}人已阅读
{{nature('2019-12-26 17:20:52')}} {{format('7573')}}人已阅读
{{nature('2019-12-26 16:03:55')}} {{format('5017')}}人已阅读
目录
标签云
一言
评论 0
{{userInfo.data?.nickname}}
{{userInfo.data?.email}}