2009-11-16 14 views
0

J'essaye de crypter certaines données en utilisant la gemme Ezcrypto dans Ruby. Les choses marchent parfaitement sous IRM, mais j'obtiens des résultats étranges en utilisant le même code avec JRuby.ezcrypto ne pas crypter de manière cohérente dans JRuby (MRI va bien)

Exécuter le suivant devrait produire la même sortie avec répété appelé.

Sortie de l'IRM:

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" 

Cette sortie peut être déchiffré tout à fait heureux.

De JRuby bien, je reçois une sortie différente à chaque appel:

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" 

Aucun qui peut être déchiffré avec succès.

Existe-t-il des étapes de configuration supplémentaires dans JRuby qui doivent être effectuées pour que cela fonctionne?

Répondre

1

Terminé juste de coder la même chose en utilisant OpenSSL directement. Messier, mais ça marche. J'ai une théorie selon laquelle EzCrypto sous JRuby régénère aléatoirement le vecteur d'initialisation chaque fois que le cryptage est appelé, sans possibilité de le définir, d'où une sortie différente à chaque fois.

N'a pas eu l'occasion d'étudier plus