解决方法如下:
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from Crypto.Random import get_random_bytes
def encrypt_file(key, file_path, output_path):
cipher = AES.new(key, AES.MODE_CBC)
with open(file_path, 'rb') as file:
data = file.read()
encrypted_data = cipher.encrypt(pad(data, AES.block_size))
iv = cipher.iv
with open(output_path, 'wb') as file:
file.write(iv + encrypted_data)
def decrypt_file(key, file_path, output_path):
with open(file_path, 'rb') as file:
data = file.read()
iv = data[:AES.block_size]
encrypted_data = data[AES.block_size:]
cipher = AES.new(key, AES.MODE_CBC, iv)
decrypted_data = unpad(cipher.decrypt(encrypted_data), AES.block_size)
with open(output_path, 'wb') as file:
file.write(decrypted_data)
def generate_key():
return get_random_bytes(16)
# 生成随机密钥
key = generate_key()
# 加密文件
encrypt_file(key, 'input_file.txt', 'encrypted_file.bin')
# 解密文件
decrypt_file(key, 'encrypted_file.bin', 'decrypted_file.txt')
请确保已经安装了pycryptodome
库,可以使用以下命令安装:
pip install pycryptodome
以上代码示例使用了AES对称加密算法,使用CBC模式进行加密和解密。其中,key
为16字节的密钥,file_path
为要加密/解密的文件路径,output_path
为输出文件路径。加密时会生成一个包含IV和加密数据的文件,解密时需要提供该文件进行解密操作。
请根据实际需求修改文件路径和密钥生成方式。
上一篇:AES填充阻止发送最后一个块
下一篇:AES新指令集解密结果错误