我必须使用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()不松散填充?或任何其他解决方案?
我无法改变加密算法,关于字符串而不是发送给伙伴的字节也是如此 .
1 回答
填充错误通常意味着解密失败,并且失败可能包括错误的密钥,数据和编码 . 不正确的解密有副作用,也会产生不正确的填充 .
在这种情况下,它是加密数据的错误编码 . 如果您需要将加密数据作为字符串,则一般方法是使用Base64或十六进制编码 .
此代码不正确:
new String(cipher.doFinal(donnees.getBytes()));