использует ли ruby-aes отступы по умолчанию?

#java #ruby-on-rails #aes

#java #ruby-on-rails #aes

Вопрос:

Я использую следующее в проекте RoR:

somepass =Aes.encrypt_buffer(128, 'ECB', some_cypher_key, nil, pain_string)

Использует ли эта библиотека и метод ECB заполнение по умолчанию или нет?

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

В коде Java я использую: cipher = Cipher.getInstance("AES/ECB/PKCS5Padding", "SunJCE");

Эти две строки кода не создают один и тот же зашифрованный ключ.

Комментарии:

1. Надеюсь, вы имели в виду, что они не создают один и тот же зашифрованный блок вместо одного и того же зашифрованного ключа?

Ответ №1:

Aes.encrypt_buffer будет использоваться заполнение, просто не того типа, который вы ожидаете. Он заполнит блок n байтами со значением добавленных байтов. То есть, если ему нужно добавить 15 байт, он добавит 0x0f , если ему нужно добавить 5 байт, он добавит 0x05 . То есть PKCS7, как описано в RFC-5652.

Вам следует переключиться на openssl или использовать Cipher.getInstance("AES/ECB/PKCS7Padding", "BC") с java.

Комментарии:

1. Спасибо, Милан. Использование заполнения PKCS7 с поставщиком BC дает тот же результат, что и при использовании заполнения PKCS5 с поставщиком SunJCE. Есть идеи, почему это так? Также я заметил, что некоторые пароли возвращают зашифрованный ключ с ‘-‘ впереди, но в ruby это не так. Есть мысли? Спасибо

2. Прошло некоторое время с тех пор, как я в последний раз играл со стандартами pkc, но вскоре я понял, что pkcs7 — это просто расширение pkc5, которое может обрабатывать большие блоки. Вот почему вы получаете те же результаты. Кажется, что ваш код должен работать, но это не совсем так из-за ошибочной стандартной реализации ruby-aes. Мой совет — вместо этого переключиться на openssl и повторить попытку.

3. есть ли вероятность, что я мог получать эти странные ключи, потому что я неправильно кодирую байты из шифра?