问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何用Java进行3DES加密解

发布网友 发布时间:2022-04-24 16:57

我来回答

1个回答

热心网友 时间:2022-05-19 03:18

最近一个合作商提出使用3DES交换数据,本来他们有现成的代码,可惜只有.net版本,我们的服务器都是Linux,而且应用都是Java。于是对照他们提供的代码改了一个Java的版本出来,主要是不熟悉3DES,折腾了一天,终于搞定。
所谓3DES,就是把DES做三次,当然不是简单地DES DES DES就行了,中途有些特定的排列。这个我可不关心,呵呵,我的目的是使用它。
在网上搜索了一下3DES,找到很少资料。经过朋友介绍,找到GNU Crypto和Bouncy Castle两个Java扩充包,里面应该有3DES的实现吧。
从GNU Crypto入手,找到一个TripleDES的实现类,发现原来3DES还有一个名字叫DESede,在网上搜索TripleDES和DESede,呵呵,终于发现更多的资料了。
Java的安全API始终那么难用,先创建一个cipher看看算法在不在吧
Cipher cipher = Cipher.getInstance("DESede");

如果没有抛异常的话,就证明这个算法是有效的
突然想看看JDK有没有内置DESede,于是撇开Crypto,直接测试,发现可以正确运行。在jce.jar里面找到相关的类,JDK内置了。
于是直接用DES的代码来改&测试,最后代码变成这样
SecureRandom sr = new SecureRandom();
DESedeKeySpec dks = new DESedeKeySpec(PASSWORD_CRYPT_KEY.getBytes());
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
SecretKey securekey = keyFactory.generateSecret(dks);
Cipher cipher = Cipher.getInstance("DESede");
cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
return new String(Hex.encodeHex(cipher.doFinal(str.getBytes())));

需要留意的是,要使用DESede的Spec、Factory和Cipher才行
事情还没完结,合作商给过来的除了密钥之外,还有一个IV向量。搜索了一下,发现有一个IvParameterSpec类,于是代码变成这样
SecureRandom sr = new SecureRandom();
DESedeKeySpec dks = new DESedeKeySpec(PASSWORD_CRYPT_KEY.getBytes());
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
SecretKey securekey = keyFactory.generateSecret(dks);
IvParameterSpec iv = new IvParameterSpec(PASSWORD_IV.getBytes());
Cipher cipher = Cipher.getInstance("DESede");
cipher.init(Cipher.ENCRYPT_MODE, securekey, iv, sr);
return new String(Hex.encodeHex(cipher.doFinal(str.getBytes())));

但是,运行报错了
java.security.InvalidAlgorithmParameterException: ECB mode cannot use IV

ECB是什么呢?我的代码完全没有写ECB什么的
又上网搜索,结果把DES的来龙去脉都搞清楚了
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
使命召唤9打不开,每次都出现这个情况,怎么弄啊 使命召唤9无法进入关卡 百度知道百度知道的作用 梦见在水里走什么预兆 梦见光脚走路是什么兆头 西装如何穿搭才有高级感? 西装怎样搭配才能穿出又飒又优雅的气势? 西装如何搭配才能穿出优雅成熟的气质? 我考了两次科目三路考,很不辛没能通过,我想放弃了,纠结?学车很辛苦... 我考过不了科目三 ICBC-ATMC加密模式设置工具? 拨号上网电脑为什么总掉线 什么是3DES对称加密算法? 单位网络经常掉线,是什么问题? 3DES 加密解密 为何办公室网络时断时续??解决再加100分 我用3DES加密后怎么样才能得到16位的密文 办公室电脑总是断网 需重连 如何使用3des算法 加密文档 如何用Java进行3DES加密解密 办公楼内大概100多台电脑,但是网络非常不稳定,有的办公室能上,但有的办公室总是掉线,是什么原因怎么办 3des加密 密钥 办公室局域网内,其他电脑上网正常,我的总是经常掉线怎么回事? 3des加密原理 java进行3des加密传过来的数据,php怎么解密? 电脑经常掉线怎么办 办公室网络总掉。 办公室网络无故掉线 为什么我们办公室的网络总是不间断的掉线? 为什么我的办公电脑老掉线 我用的是笔记本在家没问题 3DES的加密过程 3des加密算法是标准的吗 ios 3des加密 32位key怎么使用 如何使用3des加密方式得到只含数字和字母的加密字符串(C#) 直肠变大,怎么变回去呀? 卫士通加密机怎么样实现3des加解密 直肠变大,大家都怎么治疗的? java 3des双倍长 有参考的代码给提供下吗? 直肠粗大,怎么治疗呀? C#3des加密时候需要密钥 直肠变大了,怎么变回去呀? 直肠炎,直肠粗大,怎么做手术治疗呀? 电脑的文件侠是怎样加密的,不用加密工具??? 恒天然安满怎么样? 安满益生菌和恒天然集团有什么关系呢? 人的直肠的长度大概为多少厘米? 各位觉得安满和美素佳儿奶粉哪个更好? 人的直肠的长度大概为多少厘米 安满婴儿奶粉怎样,是大品牌吗? 结肠癌和直肠癌统称为“大肠癌”,它们的早期症状有哪些?