DES算法,JAVA遇到的问题

1 使用Based64编码是出现的问题

  java.lang.IllegalArgumentException

  解释:这种情况出现在解密时,主要原因是based64加密时用了sun的内部包sun.misc,这是sun公司专门提供给内部使用的API,所以应该换其他的包试试,如下:

  import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;

  import org.apache.commons.codec.binary.Based64;

  但是第一个类,该类不属于JDK标准库范畴,但在JDK中包含了该类,可以直接使用。但是在eclipse中直接使用却找不到该类,可以在eclipse上用如下方法解决;

  Properties–>Java Build Path-> Libraries –>JRESystem Library–>Access rules –>双击–>Type Access Rules,在Accessible中添加accessible,下面填上**点击确定;

  具体请看:https://www.cnblogs.com/momoli/p/10154335.html

2 解决问题1之后,发现出现如下问题

  javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher

  这是因为DES的填充模式不同,建议使用ECB模式,同时如果使用的是NoPadding填充方式也会出现上述问题,建议使用PKCS5Padding填充方式,这个就不需要输入的源数据为8的倍数了。

3 使用DES/ECB/PKCS5Padding之后依旧报错

  可是使用了”DES/ECB/PKCS5Padding“,还是出现了上述问题,最后绞尽脑汁,才发现自己加密时是先加密,然后用的BASED64编码了;

  解密的时候先解密,然后再解码,这种方式错误了,解密时应该先解码再解密,可以防止未解码而导致源数据出现的问题,

4 结果

  最后检查代码时,发现中文加密后,进行解密时,解出的明文是乱码,原来我加密时用了data.getBytes(“utf-8”);

  而解密时,我用了return new String(Base64.encode(cipher.doFinal(data))),无法以相同的方式将字节数组转化为字符串;

  因此我将加密解密字符串与字节数组的转化方式设为默认,也就是不写,然后就成功了。

原文链接:https://www.cnblogs.com/momoli/p/10154130.html

来源链接:https://www.cnblogs.com/daytoy105/p/18670675

  Properties–>Java Build Path-> Libraries –>JRESystem Library–>Access rules –>双击–>Type Access Rules,在Accessible中添加accessible,下面填上**点击确定;

  具体请看:https://www.cnblogs.com/momoli/p/10154335.html

2 解决问题1之后,发现出现如下问题

  javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher

  这是因为DES的填充模式不同,建议使用ECB模式,同时如果使用的是NoPadding填充方式也会出现上述问题,建议使用PKCS5Padding填充方式,这个就不需要输入的源数据为8的倍数了。

3 使用DES/ECB/PKCS5Padding之后依旧报错

  可是使用了”DES/ECB/PKCS5Padding“,还是出现了上述问题,最后绞尽脑汁,才发现自己加密时是先加密,然后用的BASED64编码了;

  解密的时候先解密,然后再解码,这种方式错误了,解密时应该先解码再解密,可以防止未解码而导致源数据出现的问题,

4 结果

  最后检查代码时,发现中文加密后,进行解密时,解出的明文是乱码,原来我加密时用了data.getBytes(“utf-8”);

  而解密时,我用了return new String(Base64.encode(cipher.doFinal(data))),无法以相同的方式将字节数组转化为字符串;

  因此我将加密解密字符串与字节数组的转化方式设为默认,也就是不写,然后就成功了。

原文链接:https://www.cnblogs.com/momoli/p/10154130.html

来源链接:https://www.cnblogs.com/daytoy105/p/18670675

请登录后发表评论

    没有回复内容