2009-11-16 17 views
0

我試圖使用Ruby中的Ezcrypto gem來加密一些數據。在MRI環境下運行時,情況會非常好,但是當使用JRuby運行相同的代碼時,我會得到奇怪的結果。ezcrypto在JRuby中不能一致加密(MRI很好)

執行以下操作應該產生與重複調用相同的輸出。從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中是否有任何額外的配置步驟需要完成才能使其發揮作用?

回答

1

最終直接使用OpenSSL編碼相同的東西。梅西耶,但它的作品。

我有一個理論認爲,JRuby下的EzCrypto在每次調用encrypt時都會隨機地重新生成初始化向量,無法設置它,因此每次都會產生不同的輸出。

還沒有機會進一步調查

相關問題