c++ aes 加解密文件代码
时间: 2023-11-05 21:02:47 浏览: 126
用C++ 实现AES加解密的源代码
4星 · 用户满意度95%
AES(Advanced Encryption Standard,高级加密标准)是一种对称加密算法,用于保护数据的机密性。对于给定的明文(原始数据),利用AES算法进行加密可以生成密文,而对密文进行解密则可以得到原始数据。
以下是使用Python编写的AES加解密文件的代码:
```python
from Crypto.Cipher import AES
import os
def encrypt_file(key, in_filename, out_filename=None, chunksize=64*1024):
if not out_filename:
out_filename = in_filename + '.enc' # 如果未指定输出文件名,则使用输入文件名加上扩展名
iv = os.urandom(AES.block_size) # 生成一个与块大小相等的随机初始向量
encryptor = AES.new(key, AES.MODE_CBC, iv) # 创建AES加密器
with open(in_filename, 'rb') as infile:
with open(out_filename, 'wb') as outfile:
outfile.write(iv) # 在加密文件开头写入初始向量
while True:
chunk = infile.read(chunksize)
if len(chunk) == 0:
break
elif len(chunk) % 16 != 0: # 如果块大小不是16的倍数,则补齐到16的倍数
chunk += b' ' * (16 - len(chunk) % 16)
outfile.write(encryptor.encrypt(chunk)) # 加密块并写入加密文件
def decrypt_file(key, in_filename, out_filename=None, chunksize=64*1024):
if not out_filename:
out_filename = os.path.splitext(in_filename)[0] # 如果未指定输出文件名,则使用输入文件名的前缀
with open(in_filename, 'rb') as infile:
iv = infile.read(AES.block_size) # 从加密文件开头读取初始向量
decryptor = AES.new(key, AES.MODE_CBC, iv) # 创建AES解密器
with open(out_filename, 'wb') as outfile:
while True:
chunk = infile.read(chunksize)
if len(chunk) == 0:
break
decrypted_chunk = decryptor.decrypt(chunk) # 解密块
outfile.write(decrypted_chunk.rstrip(b' ')) # 去除补齐的空格并写入解密文件
# 示例用法
key = b'0123456789abcdef' # 加密密钥,必须是16、24或32字节长度
encrypt_file(key, 'plaintext.txt') # 加密文件
decrypt_file(key, 'plaintext.txt.enc') # 解密文件
```
上述代码使用了Crypto库中的AES模块实现AES加解密功能,并采用CBC模式进行加解密。其中,`encrypt_file`函数用于加密文件,`decrypt_file`函数用于解密文件。
阅读全文