博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DES算法,JAVA,遇到的问题
阅读量:5927 次
发布时间:2019-06-19

本文共 1081 字,大约阅读时间需要 3 分钟。

(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-->Bulid Path-> Libraries -->JRESystem Library-->Access rules -->双击-->Type Access Rules,在Accessible中添加accessible,下面填上**点击确定

具体请看:

(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",还是出现了上述问题,最后绞尽脑汁,才发现自己加密时是先加密,然后用的BASED64编码了,解密的时候先解密,然后再解码,这种方式错误了,解密时应该先解码再解密,可以防止未解码而导致源数据出现的问题,

(4)最后检查代码时,发现中文加密后,进行解密时,解出的明文是乱码,原来我加密时用了data.getBytes("utf-8"),而解密时,我用了return new String(Base64.encode(cipher.doFinal(data))),无法以相同的方式将字节数组转化为字符串,因此我将加密解密字符串与字节数组的转化方式设为默认,也就是不写,然后就成功了。

 

转载于:https://www.cnblogs.com/momoli/p/10154130.html

你可能感兴趣的文章
DOM 元素中的焦点管理
查看>>
分享一些好用的网站
查看>>
SAP R/3系统的R和3分别代表什么含义,负载均衡的实现原理
查看>>
第十二课时:渲染函数和JSX快速掌握
查看>>
聊聊flink的MemorySegment
查看>>
学习JavaScript循环下的async/await
查看>>
30秒的PHP代码片段(3)字符串-String & 函数-Function
查看>>
介紹敏捷方法: Scrum, Kanban or Lean?
查看>>
Web前端开发过程踩过的坑以及一些小方法技巧(持续更新)
查看>>
力扣(LeetCode)31
查看>>
vue JS 对象赋值
查看>>
快速体验 Sentinel 集群限流功能,只需简单几步
查看>>
web前端开发项目资源网站,私家珍藏!
查看>>
原型链
查看>>
241. Different Ways to Add Parentheses
查看>>
Objective-C 中关联引用的概念
查看>>
JavaScript 如何使用闭包
查看>>
小程序开发之影分身术
查看>>
关于React-redux的Provider, connect的解析
查看>>
阐述商业数据分析
查看>>