我有一些使用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文档,它似乎应该有效。
我做错了什么?
答案 0 :(得分:4)
cipher.update(block)
返回byte[]
数组。你扔掉了。发送,或写入文件,或任何你应该用它做的事情。 cipher.doFinal()
的结果只是最终的内务byte[]
数组,您还需要发送,写入或其他任何内容。它不是整个加密。