【发布时间】:2017-11-29 23:14:41
【问题描述】:
我必须使用 AES/ECB/PKCS5Padding 对字符串进行编码。然后将加密结果( new 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() 不松散填充?或任何其他解决方案?
我无法更改加密算法,对于发送给合作伙伴的字符串而不是字节也可以这样说。
【问题讨论】:
-
您不能像那样将字节转换为字符串。至少您需要使用 8 位编码,或者最好使用 Base64 之类的编码。
-
多谢两位,问题解决了。我对字节的工作原理有一个非常错误的理解。
-
不要在新作品中使用 ECB 模式并尽快更新旧作品,它不安全,请参阅ECB mode,向下滚动到企鹅。而是使用带有随机IV的CBC模式,只需在加密数据前加上IV用于解密即可,它不需要保密。
标签: java encryption cryptography