14

以下を実行するための Java コード例を探していましたが、うまくいきませんでした。私は自分の特定の状況の解決策を探しています。

キーと IV は、パスワードに「testtest」を使用して生成されています。

openssl enc -aes-256-cbc -P 
salt=2855243412E30BD7
key=E4A38479A2349177EAE6038A018483318350E7F5430BDC8F82F1974715CB54E5
iv=629E2E1500B6BA687A385D410D5B08E3

ファイル (テキストという名前) は、openssl コマンドを使用して Linux で暗号化されています。

openssl enc -aes-256-cbc -K 
E4A38479A2349177EAE6038A018483318350E7F5430BDC8F82F1974715CB54E5 -iv
629E2E1500B6BA687A385D410D5B08E3 -e -in text -out text_ENCRYPTED

以下を使用して正常に復号化できます。

openssl enc -aes-256-cbc -K 
E4A38479A2349177EAE6038A018483318350E7F5430BDC8F82F1974715CB54E5 -iv 
629E2E1500B6BA687A385D410D5B08E3 -d -in text_ENCRYPTED -out text_DECRYPTED

暗号化されたファイル、ソルト、キー、および iv にアクセスできます。パスワードが届くとは思えません。また、無制限の強度の JCE ポリシーをインストールしました。これまでのところ、別の Java プログラムが暗号化を行い、これらのパラメーターを生成する例しか見つけていません。私の場合、与えられたソルト、キー、および iv の値を使用してファイルを復号化する必要があります。これはJavaで可能ですか?私はこの構成に拘束されていることを覚えておいてください。お時間とご協力をありがとうございました。

4

1 に答える 1

19

次のようなものを使用する必要があります。

InputStream cipherInputStream = null;
try {
    final StringBuilder output = new StringBuilder();
    final byte[] secretKey = javax.xml.bind.DatatypeConverter.parseHexBinary("E4A38479A2349177EAE6038A018483318350E7F5430BDC8F82F1974715CB54E5");
    final byte[] initVector = javax.xml.bind.DatatypeConverter.parseHexBinary("629E2E1500B6BA687A385D410D5B08E3");
    final Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(secretKey, "AES"), new IvParameterSpec(initVector, 0, cipher.getBlockSize()));
    cipherInputStream = new CipherInputStream(new FileInputStream("text_ENCRYPTED"), cipher);

    final String charsetName = "UTF-8";

    final byte[] buffer = new byte[8192];
    int read = cipherInputStream.read(buffer);

    while (read > -1) {
        output.append(new String(buffer, 0, read, charsetName));
        read = cipherInputStream.read(buffer);
    }

    System.out.println(output);
} finally {
    if (cipherInputStream != null) {
        cipherInputStream.close();
    }
}
于 2013-03-24T04:35:56.493 に答える