javax.crypto.Cipherを使用して、次のように暗号化すると正常に機能する暗号化コードがいくつかあります。
byte[] data = cipher.doFinal(srcdata); // srcdata is a byte[]
しかし、私は単一のブロックとして暗号化したい複数のbyte []がある場合に遭遇しました。だから私はこれを試しました:
for (byte[] block : blocks) {
cipher.update(block);
}
byte[] data = cipher.doFinal();
その結果をデコードすると、次のエラーが表示されます。
javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:811)
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:676)
at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:313)
at javax.crypto.Cipher.doFinal(Cipher.java:2131)
CipherのJavaドキュメントを読むと、動作するはずです。
私は間違って何をしていますか?
回答:
回答№1は4cipher.update(block)
返す byte[]
アレイ。あなたはそれを捨てています。それを送信するか、ファイルに書き込むか、またはあなたがそれを行うことになっているものは何でも。 cipher.doFinal()
最後のハウスキーピングです byte[]
配列。送信、書き込み、その他何でも必要です。暗号化全体ではありません。