ezcrypto在JRuby中不能一致加密(MRI很好)

时间:2009-11-16 23:59:10

标签: ruby openssl jruby

我正在尝试使用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中是否需要执行额外的配置步骤才能使其正常工作?

2 个答案:

答案 0 :(得分:1)

直接使用OpenSSL编写相同的代码。梅西耶,但它确实有效。

我有一个理论认为,每次加密被调用时,JRuby下的EzCrypto都会随机重新生成初始化向量,无法设置它,因此每次都有不同的输出。

没有机会进一步调查

答案 1 :(得分:1)

看起来你应该在http://jira.codehaus.org/browse/JRUBY提交一个错误。