Шифрование Pycrypto OpenPGP: почему для ключа существует ограничение в 16 байтов, какую часть ключа я предоставляю, чтобы получить 16 байтов?

Я пытаюсь зашифровать файл с помощью OpenPGP в python через приложение pycrypto. Я следил за образцом, представленным в их коде здесь: https://github.com/dlitz/pycrypto/blob/master/lib/Crypto/Cipher/CAST.py

Итак, я использую mode.openPGP, но не могу ничего зашифровать с помощью открытого ключа. Мой открытый ключ значительно превышает установленный ими предел в 16 байт (и любое поколение, которое я видел, также превышает этот предел). Есть ли другое значение, которое я должен использовать здесь, например, идентификатор отпечатка пальца?

Я пытаюсь прочитать содержимое файла, зашифровать его с помощью ключа, а затем распечатать в новый файл для отправки (оба будут удалены позже). Мой код выглядит следующим образом:

iv = CryptoRandom.new().read(CAST.block_size)
cipher = CAST.new(public_key, CAST.MODE_OPENPGP, iv)
file = open(filename)
contents = ''.join(file.readlines())
encrypted_contents = cipher.encrypt(contents)
encrypted_filename = filename.replace('/tmp/', '/tmp/encrypted')
encrypted_filename = encrypted_filename.replace('.csv', '.asc')
encrypted_file = open(encrypted_filename, 'w')
encrypted_file.write(encrypted_contents)
return encrypted_filename

person user1686149    schedule 09.10.2013    source источник


Ответы (1)


Я думаю, вы можете неправильно понять алгоритм, который вы используете здесь. CAST — это алгоритм с симметричным ключом, но хотя эта реализация имеет «режим OpenPGP», это не означает, что вы просто передаете ему свой открытый ключ.

Вы должны сгенерировать уникальный 16-байтовый ключ и передать его CAST.new(). Затем вы обычно шифруете этот случайно сгенерированный ключ с помощью открытого ключа и сохраняете/передаете зашифрованный текст и зашифрованный случайный ключ вместе. Процесс расшифровки будет расшифровывать случайный ключ с помощью закрытого ключа, а затем использовать расшифрованный случайный ключ для расшифровки зашифрованного текста.

person Iridium    schedule 10.10.2013
comment
Ах, это имеет смысл, но как мне тогда что-то зашифровать с помощью открытого ключа, я столкнусь с той же ошибкой. В настоящее время я пытаюсь использовать сгенерированный RSA ключ PGP и использую файл открытого ключа RSA в pycrypto для его загрузки, но он продолжает говорить мне, что это не структура DER при импорте ключа. Я действительно потерялся здесь, я думаю... - person user1686149; 10.10.2013
comment
@user1686149 user1686149 Я бы предложил задать отдельный вопрос о проблемах с шифрованием RSA, которые у вас возникают, обязательно опубликовав код, который вы используете. - person Iridium; 10.10.2013
comment
Сделаю. Спасибо за помощь. - person user1686149; 10.10.2013