我正在尝试使用Ruby中的Ezcrypto gem加密一些数据。在MRI下运行时,事情很有效,但是当使用JRuby运行相同的代码时,我得到了奇怪的结果。
执行以下应该生成相同的输出并重复调用。
MRI输出:
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 :(得分:1)
直接使用OpenSSL编写相同的代码。梅西耶,但它确实有效。
我有一个理论认为,每次加密被调用时,JRuby下的EzCrypto都会随机重新生成初始化向量,无法设置它,因此每次都有不同的输出。
没有机会进一步调查
答案 1 :(得分:1)
看起来你应该在http://jira.codehaus.org/browse/JRUBY提交一个错误。