不废话, 直接上代码
# coding=utf-8
import hashlib
from Crypto.Cipher import AES
def to_sixteen(data):
# encrypt时, 长度必须是16的倍数
bs = AES.block_size
padding = bs - len(data) % bs
padding_text = chr(padding) * padding
return data + padding_text
def parse_data_from_sixteen(data):
# 解密时, 删除末尾的, 即使正好长度16, to_sixteen的做法也是末尾添加16个补位
_len = len(data)
padding = ord(data[_len - 1])
return data[:_len - padding]
def encrypt(content):
magic = 'my_magic_key'
key = hashlib.sha256(magic).digest()
# AES.MODE_CBC模式必须长度为16
iv = key[:16]
aes = AES.new(key, AES.MODE_CBC, iv)
return aes.encrypt(to_sixteen(content))
def decrypt(content):
magic = 'my_magic_key'
key = hashlib.sha256(magic).digest()
iv = key[:16]
aes = AES.new(key, AES.MODE_CBC, iv)
return parse_data_from_sixteen(aes.decrypt(content))
if __name__ == '__main__':
data = 'hello world'
a = encrypt(data)
print a
b = decrypt(a)
print b
运行结果