3Des加密不同JDK版本,加密结果有差异
银行项目
用了几个加密的工具类,里面很杂,各种加密方法。
所以想调方法本身的问题,难度很大。
现在存在一个问题,就在原本使用JDK6的时候,加/解密钥的时候,结果都是正常的。
但是现在因为项目原因,一定要使用JDK8,发现在JDK8下,加解密结果跟JDK6的有差异,密钥全部比对不上。
这是为什么?或者怎么解决。
主要是8583报文中的数据加解密,使用Desc、3Des、AES几种算法
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
怎么解决的的呢必须换jdk吗,我们和第三方版本不一致
引用来自“BoXuan”的评论
给你一个我用的,看是否有帮助。再就是你看看你是否用了随机秘钥源,可能问题出在这里。
JAVA默认用ECB模式,但当用CBC模式下,如果还是用SecureRandom, 则每次加密的结果都会不一样,因为JAVA内部会用随机的IV来初始化Cipher对象,如示例代码, 由于Cipher.getInstance("DES/CBC/PKCS5Padding")使用了CBC, 因此我这里用的javax.crypto.spec.IvParameterSpec包下的IvParameterSpec来初始化向量IV
JAVA中默认的算法模式为ECB,默认填充方式为PKCS5Padding。我这里因为是跟unity通信,而C#默认是CBC模式,所以此处都是用的CBC模式
给你一个我用的,看是否有帮助。再就是你看看你是否用了随机秘钥源,可能问题出在这里。
JAVA默认用ECB模式,但当用CBC模式下,如果还是用SecureRandom, 则每次加密的结果都会不一样,因为JAVA内部会用随机的IV来初始化Cipher对象,如示例代码, 由于Cipher.getInstance("DES/CBC/PKCS5Padding")使用了CBC, 因此我这里用的javax.crypto.spec.IvParameterSpec包下的IvParameterSpec来初始化向量IV
JAVA中默认的算法模式为ECB,默认填充方式为PKCS5Padding。我这里因为是跟unity通信,而C#默认是CBC模式,所以此处都是用的CBC模式