我正在开发一个应用程序,用户上传文件,应用程序会自动为他们处理。为了数据安全,我想加密这些文件。这些文件的大小可以从小到大不等(2MB到30MB以上(。我发现PyCrypto是事实上的加密/解密包。文件在处理后被读取到io.BytesIO((中,然后从字节流中创建一个文件。我想知道是否可以"加密"字节流,然后创建文件。这样,当我将文件读取到io.Bytes((中时,我就可以解密它并将文件提供给用户。
PyCrypto已被放弃,在Python 3.8中不起作用,因此这项工作的最佳候选者是pyca/cryptography
,但如果您真的需要,可以从以下内容开始:
from io import BytesIO
from Crypto import Random
from Crypto.Cipher import AES
payload = BytesIO(b"SomeData")
# Implement PKCS7 padding.
block_size = 16
length = payload.getbuffer().nbytes
to_pad = block_size - length % block_size
payload.seek(length)
payload.write((chr(to_pad) * to_pad).encode("utf8"))
payload.seek(0)
# Setup the cipher.
iv = Random.new().read(block_size)
cipher = AES.new(
"16-CHAR-LENGTH__", # Some secret.
mode=AES.MODE_CBC,
IV=iv,
)
encrypted = cipher.encrypt(payload.read())