简介
高级加密标准(Advanced Encryption Standard: AES)是美国国家标准与技术研究院(NIST)在 2001 年建立了电子数据的加密规范。其是对称加解密算法的最经典算法之一,它是一种分组加密标准,每个加密块大小为 128 位,允许的密钥长度为 128、192 和 256 位。这里只介绍 ECB 加密模式。
AES 加密模式:ECB/CBC/CTR/OFB/CFB
填充:pkcs5padding/pkcs7padding/zeropadding/iso10126/ansix923
数据块:128 位/192 位/256 位
使用
安装依赖
1 2 3 4 5
| pip install pycrypto
pip install pycryptodome
|
比较遗憾的是,Python 的 PKCS5 的实现需要自己来,虽然也不是太难。不过有点麻烦
具体实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| from Crypto.Cipher import AES
def pad(s: str) -> str: """ padding PKCS5 """ block_size = AES.block_size return s + (block_size - len(s) % block_size) * chr(block_size - len(s) % block_size)
def unpad(s: bytes) -> str: """ Unpadding PKCS5 """ return s[:s[-1]].decode('utf-8')
def encrypt(s: str, password: bytes) -> bytes: cipher = AES.new(password, AES.MODE_ECB) return cipher.encrypt(pad(s).encode('utf-8'))
def decrypt(hex_string: str, password: bytes) -> str: raw = bytearray.fromhex(hex_string) cipher = AES.new(password, AES.MODE_ECB) pad_string = cipher.decrypt(raw) return unpad(pad_string)
if __name__ == "__main__": password = b"1234567890123456" v = encrypt("Hello world", password) secret_message = v.hex()
message = decrypt(secret_message, password) print("Message is", message)
|
参考链接
https://juejin.cn/post/7026635907742564365