1

OpenSSLを使用して暗号化を行うRubyのレガシーコードがありますが、
これをJavaで翻訳したいのですが、迷っています。これまでのところ、私の最大の障害は、このコードに基づいて IV を生成する方法を考え出すことです。どんな助けでも大歓迎です

    def func_enc(data, key)
        cipher = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
        cipher.encrypt
        cipher.pkcs5_keyivgen(key)
        cipher.update(data)
        encrypted_data << cipher.final
        return encryptedData
    end

EDIT
明確にするために、これには Java Crypto を使用したいと思います。これは私がこれまでに思いついたコードです:

    SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithMD5And256AES-CBC");
    KeySpec spec = new PBEKeySpec("Password".toCharArray(), null, 2048, 256);
    SecretKey tmp = factory.generateSecret(spec);
    SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    cipher.init(Cipher.ENCRYPT_MODE, secret);
    AlgorithmParameters params = cipher.getParameters();
    byte[] iv = params.getParameterSpec(IvParameterSpec.class).getIV();

プロバイダーが"PBKDF2WithMD5And256AES-CBC"なく、 NoSuchAlgorithm 例外が発生します。

    java.security.NoSuchAlgorithmException: PBKDF2WithMD5And256AES-CBC SecretKeyFactory not available

pkcs5_keyivgenまた、デフォルトで使用するソルトはnullです!! Java で null ソルトを使用できるかどうかはわかりません。

正しい IV を生成するにはどうすればよいですか?

4

1 に答える 1

0

このドキュメンテーション ページの警告は、非推奨の pkcs5_keyivgen メソッドが AES と一緒に使用された場合に非標準的なことを行うことを示唆しています。まず、PBKDF2 ではなく PBKDF1 を使用します。

その動作を再現するのは難しいかもしれません。暗号化アルゴリズムの実装は、自分が何をしているのかを正確に理解していない限り、一般的にはお勧めできません。専門家でさえしばしば間違っています。

于 2013-06-27T18:09:57.217 に答える