同様の質問が寄せられていることは承知していますが、いずれの問題についても解決できません。
次の Unix コマンドで作成された暗号化ファイルがあります。
tar cf FILES | gzip | openssl enc -k PASSWORD -aes-256-cbc -e > OUTPUT.tar.gz.enc
関連するコマンドでファイルを正常に復号化できます。
このファイルを Java プロセスで復号化する必要があります。この SO answerに示されているコードを使用しました。
私は同じEVP_BytesToKey
機能を使用していますが、わずかに異なるmain
機能です。
これは、暗号化されたファイルをロードする方法です。
byte[] headerSaltAndCipherText = IOUtils.toByteArray(new
InputStreamReader(new FileInputStream(f)));
サンプル コードでは、データは base64 でエンコードされているようです。ただし、ファイルを読み取ると、そうではありません(「Salted__」ヘッダーがはっきりとわかります)
easCBC
私はこの方法でオブジェクトを作成しました:
Cipher aesCBC = Cipher.getInstance("AES/CBC/PKCS5Padding", "BC");
そして、関数Security.addProvider(new BouncyCastleProvider());
の先頭に追加しました。main
行き詰まったのでBouncyCastleを使い始めましたが、何も変わりませんでした。
私もandで試しましPKCS7Padding
たNoPadding
が、運がありませんでした。
間違ったパディングが使用されているか、暗号化されたデータが適切にエンコード/ロードされていないというよくある問題。
例とまったく同じように行っていないので、答えは 2 番目の解決策だと思います。例のようにファイルをロードしようとしましたが、この例外がありjava.nio.charset.MalformedInputException: Input length = 1
、とにかく JDK 1.7 の機能を使用できません。
私は何を間違っていますか?