使用Python对文件进行AES算法的加密和解密
AES算法简介
高级加密标准, 它是一种对称加密算法,AES只有一个密钥,这个密钥既用来加密,也用于解密。
AES加密方式有五种:ECB, CBC, CTR, CFB, OFB。
从安全性角度推荐CBC加密方法,本文介绍了CBC加密方法的python实现。
CBC加密需要一个十六位的key(密钥)和一个十六位iv(偏移量)
Python依赖包
python 在 Windows下使用的是pycryptodome 模块
python 在 Linux下使用的是pycrypto模块
from Crypto.Cipher import AESBS = AES.block_size # 块大小
处理文件
1. 加密文件
def encrypt(data, key, iv):pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS).encode('utf-8')cipher = AES.new(key, AES.MODE_CBC, iv)data = cipher.encrypt(pad(data))return data
2. 解密文件
def decrypt(data, key, iv):if len(data) <= BS:return dataunpad = lambda s : s[0:-s[-1]]cipher = AES.new(key, AES.MODE_CBC, iv)data = unpad(cipher.decrypt(data))return data
3. 参数说明
data: 文件的二进制数据
key: 秘钥,需要是编码的bytes,如utf-8编码
In [3]: key = "password"In [4]: key.encode('utf-8')
Out[4]: b'password'
iv: 偏移量,同key
需要是编码的bytes
4. 使用说明
pad和unpad分别是填充函数和逆填充函数。因为AES加密对加密文本有长度要求,必须是block_size的倍数