我正在开发一个应用程序,用户在该应用程序上载文件,并且该应用程序会自动为其处理文件。为了数据安全,我想对这些文件进行加密。这些文件的大小可以从很小到很大(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())