Я пытаюсь зашифровать некоторые данные с помощью драгоценного камня 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, которые необходимо выполнить, чтобы это заработало?
2 ответа
Закончилось тем, что я просто написал то же самое, используя OpenSSL напрямую. Мессье, но это работает.
У меня есть теория, что EzCrypto под JRuby регенерирует вектор инициализации случайным образом каждый раз, когда вызывается шифрование, без возможности его установки, поэтому каждый раз выводится другой результат.
Не было возможности исследовать дальше
Похоже на ошибку, которую вы должны сообщить по адресу http://jira.codehaus.org/browse/JRUBY.
Похожие вопросы
Новые вопросы
ruby
Ruby - это многоплатформенный динамический объектно-ориентированный интерпретируемый язык с открытым исходным кодом. Тег [ruby] предназначен для вопросов, связанных с языком Ruby, включая его синтаксис и его библиотеки. Вопросы Ruby on Rails должны быть помечены [ruby-on-rails].