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

posted @   DAYTOY-105  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示