提供されたコードでは、PKCS5 パディングを使用した AES/CBC を使用して復号化された後、平文の最初の部分が破損しているようです。
この問題は、暗号化および復号化されたバイトを文字列に変換しないことが原因で発生します。復号ループでは、暗号の出力が出力ストリームに直接書き込まれます。その結果、パディング情報を含む平文の最初のバイトがメッセージの一部として誤って解釈されます。
この問題を解決するには、暗号文と平文を次のように変換します。適切な文字エンコーディングを使用した文字列。これにより、パディングが正しく処理され、プレーンテキストが正確に表示されることが保証されます。
// Before encryption, encode the plaintext as a string byte[] plaintextBytes = "Hello there. How are you? Have a nice day.".getBytes(StandardCharsets.UTF_8); // ... encrypt and decrypt as before ... // Convert the decrypted bytes to a string String decryptedText = new String(decryptedBytes, StandardCharsets.UTF_8); System.out.println("Decrypted text: " + decryptedText);
以上がJava AES/CBC 復号化で破損した平文が生成されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。