Можно ли зашифровать поток байтов с помощью PyCrypto? - PullRequest
0 голосов
/ 28 февраля 2020

Я работаю над приложением, в котором пользователи загружают файл, и приложение автоматически обрабатывает его для них. Для безопасности данных я хочу зашифровать эти файлы. Эти файлы могут иметь различные размеры от маленьких до очень больших (от 2 МБ до 30 МБ). Я столкнулся с PyCrypto как де-факто пакет шифрования / дешифрования. Файлы считываются в io.BytesIO () после обработки, а затем файл создается из потока байтов. Мне было интересно, можно ли «зашифровать» поток байтов, а затем создать файл. Так что, когда я читаю файл в io.Bytes (), я могу расшифровать его и передать файл пользователю.

1 Ответ

0 голосов
/ 28 февраля 2020

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())
...