我想在Python中使用AES256加密.zip文件。我知道Python加密模块,特别是在下面给出的例子:
https://cryptography.io/en/latest/fernet/
但是,我的需求有点不同:
我想输出二进制数据(因为我想要一个小的加密文件)。如何输出二进制而不是装甲ASCII?
我不想拥有明文时间戳。有什么办法可以删除吗?
如果我无法解决这些问题,我将使用其他方法。有什么建议?我正在考虑通过子进程发出gpg命令。
答案 0 :(得分:2)
看看Fernet模块,似乎它加密和验证数据。实际上它比仅加密更安全(见here)。但是,如果您还要进行身份验证,则删除时间戳(如果是此模块)则没有意义。
说,似乎你想冒险而且只加密而不是加密和验证。您可以按照https://cryptography.io/en/latest/hazmat/primitives/symmetric-encryption/中找到的相同模块的示例进行操作。只要确保这是你真正想要的。
由于您担心尺寸并希望使用AES,因此您可以在CTR模式下尝试AES,这不需要填充,最后避免额外的字节。
import os
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
backend = default_backend()
key = os.urandom(32)
nonce = os.urandom(16)
cipher = Cipher(algorithms.AES(key), modes.CTR(nonce), backend=backend)
encryptor = cipher.encryptor()
ct = encryptor.update(b"a secret message") + encryptor.finalize()
print(ct)
decryptor = cipher.decryptor()
print(decryptor.update(ct) + decryptor.finalize())
所以,回答你的问题:
update
方法已经返回一个字节数组。