首页 文章

Java通过String加密/解密由于填充而无法正常工作

提问于
浏览
0

我必须使用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 回答

  • 1

    填充错误通常意味着解密失败,并且失败可能包括错误的密钥,数据和编码 . 不正确的解密有副作用,也会产生不正确的填充 .

    在这种情况下,它是加密数据的错误编码 . 如果您需要将加密数据作为字符串,则一般方法是使用Base64或十六进制编码 .

    此代码不正确: new String(cipher.doFinal(donnees.getBytes()));

相关问题