python 用AES-256 加密算法 加密文件
时间: 2024-11-30 21:21:42 浏览: 29
在Python中,你可以使用`cryptography`库来实现AES-256加密算法对文件进行加密。这里是一个基本的例子:
```python
from cryptography.fernet import Fernet
import os
# 首先,需要生成一个AES密钥
key = Fernet.generate_key()
# 将密钥保存到安全的地方,因为加密后的数据无法从密钥中恢复
with open('secret_key.txt', 'wb') as key_file:
key_file.write(key)
def encrypt_file(input_file, output_file):
with open(input_file, 'rb') as file:
data = file.read()
# 使用Fernet封装AES
cipher_suite = Fernet(key)
encrypted_data = cipher_suite.encrypt(data)
# 写入加密后的文件
with open(output_file, 'wb') as encrypted_file:
encrypted_file.write(encrypted_data)
# 例如,加密名为'myfile.txt'的文件
encrypt_file('myfile.txt', 'myfile.enc')
相关问题
AES-256 加密算法 python
AES-256是一种高级加密标准(Advanced Encryption Standard),它属于对称密码体制中的块加密算法,用于保护数据的安全传输和存储。Python中可以使用`cryptography`库来实现AES-256加密。
首先,你需要安装这个库,如果还没有安装,可以使用pip命令:
```bash
pip install cryptography
```
然后,在Python中,你可以按照以下步骤操作:
```python
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
# 生成随机秘钥(推荐16、24或32字节长度)
key = get_random_bytes(32) # 对于AES-256,需要256位,即32字节
# 创建一个AES cipher实例,秘钥模式设为CBC(Counter Mode with Block Chaining)或其他模式
cipher = AES.new(key, AES.MODE_CBC)
# 数据待加密,假设是一个字符串
data = "你的明文内容"
# 使用pad前导零填充,保证数据长度是AES块大小的倍数
padded_data = data + (AES.block_size - len(data) % AES.block_size) * b'\x00'
# 对数据进行加密,得到密文
iv = cipher.iv
ciphertext = cipher.encrypt(padded_data)
print("加密后的密文:", ciphertext)
AES-256加密算法示例
AES(Advanced Encryption Standard,高级加密标准)是一种对称密钥加密算法,其中最常用的是AES-256版本,它使用256位密钥提供最高级别的安全性。以下是使用Python的pycryptodome库进行AES-256加密的一个简单示例:
```python
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
# 生成一个随机256位密钥
key = get_random_bytes(32)
def aes_encrypt(message, key):
cipher = AES.new(key, AES.MODE_EAX)
ciphertext, tag = cipher.encrypt_and_digest(message.encode('utf-8'))
return cipher.nonce + tag + ciphertext
def aes_decrypt(ciphertext, key):
nonce = ciphertext[:16]
tag = ciphertext[16:32]
ciphertext = ciphertext[32:]
cipher = AES.new(key, AES.MODE_EAX, nonce=nonce)
try:
original_message = cipher.decrypt_and_verify(ciphertext, tag).decode('utf-8')
return original_message
except ValueError:
print("解密失败,可能是密文被篡改")
return None
message = "This is a secret message"
encrypted_msg = aes_encrypt(message, key)
decrypted_msg = aes_decrypt(encrypted_msg, key)
print(f"原始消息:{message}")
print(f"加密后的消息:{encrypted_msg.hex()}")
print(f"解密后的消息:{decrypted_msg}")
```
在这个例子中,我们首先创建了一个随机的256位密钥,然后使用`encrypt_and_digest`函数加密消息,并返回包括随机nonce、校验tag和实际加密后的数据。解密时,我们需要先提取nonce和tag,然后再用相同的密钥和模式进行解密。
阅读全文