Как мне зашифровать / расшифровать двоичный файл произвольной длины, используя python?

Мне любопытно, как я могу зашифровать и расшифровать двоичные файлы с помощью Python. Я посмотрел на библиотеку pycrypto, и некоторые из блочных шифров, похоже, нуждаются в длине файла, кратной 8/16/ и т. Д. - не уверен, как справиться с этим при работе с файлами произвольной длины (возможно, выровненными). Я подумал об обстреле GPG, но если бы я мог сделать это на python, это было бы здорово.

Заранее спасибо.

2 ответа

Как следует из названия, все блочные шифры - любой библиотеки - работают с блоком данных определенного размера, не больше и не меньше. Самые известные из них, TDES и AES, работают соответственно на 8 и 16 байтов.

Чтобы работать с длинами, отличными от этого, вы также должны выбрать режим работы. Все режимы таковы, что данные могут быть длиннее (или даже короче), чем размер блока. Для некоторых, тем не менее, данные должны оставаться согласованными с ним (например, CBC). Для других (например, CTR с размером сегмента 1) у вас нет никаких ограничений вообще.

Вот как вы используете PyCrypto в последнем случае (из описания API):

from Crypto.Cipher import AES
from Crypto import Random

key = b'Sixteen byte key'
iv = Random.new().read(AES.block_size)
cipher = AES.new(key, AES.MODE_CFB, iv)
msg = iv + cipher.encrypt(b'Attack at dawn')

Как видите, сообщение имеет длину 14 байт (!= 16) и может иметь любой размер.

Используйте PythonAES: https://github.com/caller9/pythonaes

Вот демонстрация, показывающая, как зашифровать / расшифровать файл. Я предполагаю, что это работает с любым размером файла: https://github.com/caller9/pythonaes/blob/master/demo.py

Другие вопросы по тегам