AES-шифрование / дешифрование между Ruby-OpenSSL, PyCrypto - PullRequest
5 голосов
/ 11 августа 2011

Я должен зашифровать кусок текста, используя Ruby.Для этого я использовал гем Ruby-Openssl.Этот зашифрованный текст передается программе Python, с помощью которой я должен расшифровать его.Я использовал Pycrypto для этой цели.

Проблема в том, что в Pycrypto мы должны указать соглашение о заполнении вручную.В Ruby заполнение выполняется автоматически.Я использую режим блочного шифра AES-CBC.Это заполнение вызывает проблемы, поскольку его удаление не может быть выполнено должным образом в Python.Например, это кодировки base64 зашифрованного текста в Ruby и Python:

Python: aENJY28lvE89yY2T/te8vWwdeoeSqSwwlrOAv7b3AWw=
Ruby:   aENJY28lvE89yY2T/te8vVoQE6JNxdSRgYXC8mqF3nI=

Пожалуйста, помогите ...

Ответы [ 2 ]

3 голосов
/ 11 августа 2011

OpenSSL применяет PKCS # 5Padding по умолчанию, поэтому он также используется автоматически при шифровании данных с помощью OpenSSL::Cipher в режиме AES-CBC (см. OpenSSL docs ). Поэтому нет необходимости выполнять заполнение вручную при использовании Ruby.

Заполнение должно выполняться вручную в Python при использовании PyCrypto.

После применения этой схемы заполнения в Python обе зашифрованные строки Base64 должны совпадать.

0 голосов
/ 11 августа 2011

Похоже, вам нужно указать правильный режим заполнения для использования в обоих случаях - заполнение является фундаментальным свойством потока шифра и должно совпадать как для получателя, так и для отправителя.

...