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