我必须使用AES / ECB / PKCS5Padding对字符串进行编码。然后将加密结果(新的String(encryptedResult),因为它们不需要字节)发送给伙伴。然后我的伙伴使用getBytes()解密字符串。
以下是解密方法:
public static String decrypter(final String donnees) throws NoSuchAlgorithmException, NoSuchPaddingException,
InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key);
return new String(cipher.doFinal(donnees.getBytes()));
}
我的问题是我在尝试解密时收到此错误: 使用填充密码解密时,输入长度必须是16的倍数。
当我直接解码字节时,它工作得很好。如何使string.getBytes()不松散填充?或任何其他解决方案?
我无法改变加密算法,关于字符串而不是发送给合作伙伴的字节也是如此。
答案 0 :(得分:1)
填充错误通常意味着解密失败,失败可能包括错误的密钥,数据和编码。不正确的解密有副作用,也会产生不正确的填充。
在这种情况下,它是加密数据的错误编码。如果您需要将加密数据作为字符串,则一般方法是使用Base64或十六进制编码。
此代码不正确:new String(cipher.doFinal(donnees.getBytes()));