Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我在解密方法中遇到BadPaddingException_Java_Encryption_Cryptography_Tripledes - Fatal编程技术网

Java 我在解密方法中遇到BadPaddingException

Java 我在解密方法中遇到BadPaddingException,java,encryption,cryptography,tripledes,Java,Encryption,Cryptography,Tripledes,我正在使用下面的(代码片段)代码对用户的私有数据进行加密,以存储在数据库中,然后解密,以便他们可以查看它 Cipher cipher = Cipher.getInstance("DESede"); byte[] bytes = cipher.doFinal(value.getBytes()); String encrypted = new String(bytes); 然后,该字符串存储在数据库中的varchar列下 要解密: Cipher cipher = Cipher.getInstanc

我正在使用下面的(代码片段)代码对用户的私有数据进行加密,以存储在数据库中,然后解密,以便他们可以查看它

Cipher cipher = Cipher.getInstance("DESede");
byte[] bytes = cipher.doFinal(value.getBytes());
String encrypted = new String(bytes);
然后,该字符串存储在数据库中的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

从加密中获得的数据是二进制的。您无法像这样安全地将
字节[]
转换为
字符串
,因为并非所有字节都有1-1的来回映射。将数据保存在可以处理二进制数据的字段中,或者使用不会丢失数据的编码(如base64Hex编码)对数据进行编码。

从加密中获得的数据是二进制的。您无法像这样安全地将
字节[]
转换为
字符串
,因为并非所有字节都有1-1的来回映射。将数据保存在可处理二进制数据的字段中,或使用不会丢失数据的编码(如base64Hex编码)对数据进行编码

String encrypted = new String(bytes);
问题就在这里<代码>字符串不是二进制数据的容器。如果必须有
字符串,请使用
字节[]
,或十六进制或base64编码


问题就在这里<代码>字符串
不是二进制数据的容器。如果必须有
字符串,请使用
byte[]
,或者使用十六进制或base64编码。。。首先,看起来您正在加密密码,这是一个非常糟糕的主意。其次,由于使用ECB模式,代码不安全。将GCM或CBC与HMAC一起使用。另外,您定义密码以使用PKCS5Padding,然后尝试手动将结果填充为字符0。。。?为什么?这是不必要的。也不要使用DES/3DES,在新工作中使用AES。有几件事。。。首先,看起来您正在加密密码,这是一个非常糟糕的主意。其次,由于使用ECB模式,代码不安全。将GCM或CBC与HMAC一起使用。另外,您定义密码以使用PKCS5Padding,然后尝试手动将结果填充为字符0。。。?为什么?这是不必要的。也不要使用DES/3DES,在新工作中使用AES。