我在我的decrypt方法中得到了BadPaddingException

时间:2017-02-04 19:23:37

标签: java encryption cryptography tripledes

我使用以下(代码段)代码来加密用户'私有数据存储在数据库中,然后解密,以便他们可以查看它。

Cipher cipher = Cipher.getInstance("DESede");
byte[] bytes = cipher.doFinal(value.getBytes());
String encrypted = new String(bytes);

然后将此String存储在varchar列下的数据库中

要解密:

Cipher cipher = Cipher.getInstance("DESede");
byte[] bytes = cipher.doFinal(value.getBytes());
String decrypted = new String(bytes);[code]

现在看似随机我偶尔会得到

javax.crypto.BadPaddingException: Given final block not properly padded

2 个答案:

答案 0 :(得分:3)

您从加密获得的数据是二进制。您无法安全地将byte[]转换为String并将其转换回来,因为并非所有字节都有来回的1-1映射。您可以将数据保存在可以处理二进制数据的字段中,也可以使用不会丢失数据的编码对数据进行编码,例如 base64 Hex 编码

答案 1 :(得分:1)

String encrypted = new String(bytes);

问题就在这里。 String不是二进制数据的容器。如果您必须拥有byte[],请使用String或hex或base64编码。