encrypted_strings RubyGemライブラリを使用してRuby Webアプリケーションで暗号化された暗号化されたメッセージを復号しようとしています。RubyのOpenSSLに相当するJava Crypto API(encrypted_stringsライブラリ経由)
は、暗号化クライアントコードは次のようになります。
cipher = EncryptedStrings::SymmetricCipher.new(:passphrase => "abcdefgh"*2)
cipher.encrypt("howdy")
=> "jEUQrH58Ulk=\n"
対称暗号アルゴリズムはDES-EDE3-CBC(RubyGemのドキュメントは同意しないが、私は、コードが言うことで行くように見えるデフォルト)。だから、Java側に私はJavaの暗号化APIのDES-EDE3-CBCの利用の一例として、オンラインで見つける次のことを試してみました:
import javax.crypto.spec.DESedeKeySpec
import javax.crypto.spec.IvParameterSpec
import javax.crypto.Cipher
import javax.crypto.SecretKeyFactory
...
DESedeKeySpec k;
Cipher c;
...
k = new DESedeKeySpec("abcdefghabcdefgh".getBytes());
c = Cipher.getInstance("DESede/CBC/PKCS5Padding");
c.init(Cipher.DECRYPT_MODE, k);
decrypted = c.doFinal("jEUQrH58Ulk=\n".getBytes());
私はJava側でこれを行うとき、私は、次のGET:
Wrong key size
私も初期化ベクトルを使用してJava暗号化APIを使用してみましたが、私は、私はencrypted_stringsライブラリを経由してのRuby側でこれをやっておりませんので、バイトを設定しなければならないのか分からなかったし、設定されているように見えますOpenSSLとのCコードでの接続
いずれのポインタも大歓迎です。
私は弾力のある城JCAプロバイダを使用しています。私はまた、DES/ECB/PKCS5Padding(コードが前述のアルゴリズムDES-EDE3-CBCを参照しているように見えるにもかかわらず、RubyGemsドキュメンテーションの文書化されたデフォルトアルゴリズムに対応しています)を試しました。
私はJava暗号APIを読んでみましたが、ドキュメントにはすべて同じコードサンプルが含まれているように見えますが、新しい手がかりはあまりありません。私の情報源は、次のとおりです。
- http://www.angelfire.com/tx4/cus/notes/javaxcrypto.html
- http://docs.oracle.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html
例外とコードは入力しないでください。必ずコピー&ペーストしてください。あなたの例外はあなたのコードと一致しないので、あなたはここでそれらの1つを誤って入力しました。 'DESedeCipherKey()'のようなクラスはありません。 –
Rubyの実装でOpenSSLを使用している場合は、ネイティブラッパーを使用して常に正確に一致させることができます。 http://www.warnertechnology.com/Computers/Software/JavaOpenSSL.shtmlこれは古代ですが、それはそれのアイデアを提供します。あなたが望むことをする商用ライブラリがたくさんありますが、無料のJava実装についてはわかりません。 –
@DanielChapman図書館リンクのおかげで、私はJava Cryptography APIを理解できない場合、その道を調査します。 – user972294