Я пытаюсь зашифровать некоторые данные с помощью драгоценного камня Ezcrypto в Ruby. Все работает отлично при работе под MRI, но я получаю странные результаты при запуске того же кода с использованием JRuby.

Выполнение следующего должно привести к тому же результату при повторном вызове.

Результат МРТ:

irb(main):007:0> Base64.encode64(EzCrypto::Key.encrypt_with_password "password", "salt","Top secret should not be revealed")
=> "6KNkObMUfXzyPey+TOGFHbozsmj5bGYqKql2Qava7++j5Moz0Zi2MwRp/FEC\nkpqw\n"
irb(main):008:0> Base64.encode64(EzCrypto::Key.encrypt_with_password "password", "salt","Top secret should not be revealed")
=> "6KNkObMUfXzyPey+TOGFHbozsmj5bGYqKql2Qava7++j5Moz0Zi2MwRp/FEC\nkpqw\n"
irb(main):009:0> Base64.encode64(EzCrypto::Key.encrypt_with_password "password", "salt","Top secret should not be revealed")
=> "6KNkObMUfXzyPey+TOGFHbozsmj5bGYqKql2Qava7++j5Moz0Zi2MwRp/FEC\nkpqw\n"

Этот вывод можно вполне успешно расшифровать.

Однако из JRuby я получаю разные результаты при каждом вызове:

irb(main):020:0> Base64.encode64(EzCrypto::Key.encrypt_with_password "password", "salt","Top secret should not be revealed")
=> "oX5JKZVkDbpbnrizI2bxkLVfQVfxayBAa0RbG+sfa9OUP1epzAyR7eDf92Bf\nVAiK\n"
irb(main):021:0> Base64.encode64(EzCrypto::Key.encrypt_with_password "password", "salt","Top secret should not be revealed")
=> "mmyKTtn78Dv3eiH2AET1olTkHNPMhtbiXth68Lqoph1nKkYyQH6cSWws/KI5\nwza0\n"
irb(main):022:0> Base64.encode64(EzCrypto::Key.encrypt_with_password "password", "salt","Top secret should not be revealed")
=> "pzDxS0p0CyDCkEY+QVyQKdgP1Of2ZeiNE06InS70ndkHnPwYOFmlH3h+xKXd\nmx54\n"

Ни один из них не может быть успешно расшифрован.

Есть ли какие-то дополнительные шаги по настройке в JRuby, которые необходимо выполнить, чтобы это заработало?

0
madlep 17 Ноя 2009 в 02:59

2 ответа

Закончилось тем, что я просто написал то же самое, используя OpenSSL напрямую. Мессье, но это работает.

У меня есть теория, что EzCrypto под JRuby регенерирует вектор инициализации случайным образом каждый раз, когда вызывается шифрование, без возможности его установки, поэтому каждый раз выводится другой результат.

Не было возможности исследовать дальше

1
madlep 17 Ноя 2009 в 13:16

Похоже на ошибку, которую вы должны сообщить по адресу http://jira.codehaus.org/browse/JRUBY.

1
Charles Oliver Nutter 10 Дек 2009 в 00:45