python对称加密到二进制没有时间戳

时间:2018-05-06 20:33:34

标签: python cryptography

我想在Python中使用AES256加密.zip文件。我知道Python加密模块,特别是在下面给出的例子:

https://cryptography.io/en/latest/fernet/

但是,我的需求有点不同:

  • 我想输出二进制数据(因为我想要一个小的加密文件)。如何输出二进制而不是装甲ASCII?

  • 我不想拥有明文时间戳。有什么办法可以删除吗?

如果我无法解决这些问题,我将使用其他方法。有什么建议?我正在考虑通过子进程发出gpg命令。

1 个答案:

答案 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())

所以,回答你的问题:

  • (1)update方法已经返回一个字节数组。
  • (2)这样就不会有自动附加到密文的明文数据(但要注意不对数据进行身份验证的安全隐患)。但是,无论如何,您都需要通过IV,无论如何都需要做什么。