Javascript与java相同的3des加密(使用etdesede/CBC/PKCS5Padding )
来源:互联网 发布:淘宝宝贝经常修改价格 编辑:程序博客网 时间:2024/05/17 09:27
转自:http://www.jianshu.com/p/8d1412940f75
在某个项目中,需要开发一个与native相对应的web前端app,后台用的是java restful接口,请求数据时需要用的3des加密。如果想要请求接口,则需要javascript的加密与java相同,于是在baidu与google进行了大量搜索,在此记录一下过程,并希望能帮助有同样需求的小伙伴。
3des加密,通俗的理解是应用三次DES加密算法,其中有许多参数与标准,此处只介绍 java接口中使用的“etdesede/CBC/PKCS5Padding” ,IvParameterSpec自行配置。以下是java源码:
Key deskey = "key";String iv = "01234567";DESedeKeySpec spec = new DESedeKeySpec(secretKey.getBytes());SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede");deskey = keyfactory.generateSecret(spec);Cipher cipher = Cipher.getInstance("desede/CBC/PKCS5Padding");IvParameterSpec ips = new IvParameterSpec(iv.getBytes());cipher.init(Cipher.ENCRYPT_MODE, deskey, ips);byte[] encryptData = cipher.doFinal(plainText.getBytes(encoding));return Base64.encode(encryptData);
javascript加密码的方法我采用了开源的CryptoJS,github地址:https://github.com/sytelus/CryptoJS
需要引入js文件:rollups/tripledes.js,components/mode-ecb.jsvar encrypted = CryptoJS.DES.encrypt(message, keyHex, { iv:CryptoJS.enc.Utf8.parse('01234567'), mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7});
以为一切就绪,结果console.log发现与java的3des结果不对应。
padding:CptoJS.pad.Pkcs7,可是java代码明明是pkcs5,但是javascript没有pkcs5,后来搜索,发现有人说Pkcs7与Pkcs5没什么区别。可是问题到底在哪呢?
又经过了一阵子漫长地搜索,后来终于在stackoverfllow中找到答案
CryptoJS.DES.encrypt只是des加密,而我用的是3des,需要用:CryptoJS.TripleDES.encrypt。终于换上TripleDES后问题解决 最终代码如下:var keyHex = CryptoJS.enc.Utf8.parse();var encrypted = CryptoJS.TripleDES.encrypt(message, keyHex, { iv:CryptoJS.enc.Utf8.parse('01234567'), mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7});console.log(encrypted);
作者:kingjang
链接:http://www.jianshu.com/p/8d1412940f75
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
- Javascript与java相同的3des加密(使用etdesede/CBC/PKCS5Padding )
- OC的DES加密,使与java的Cipher类用DES/CBC/PKCS5Padding方式的加密结果相同
- java/php对应的AES/CBC/PKCS5Padding模式 加密解密
- DES/ECB/CBC/PKCS5Padding
- java加密之AES/CBC/PKCS5Padding
- android java 3des加密 ECB/CBC
- php AES/CBC/PKCS5Padding 与java对接
- JAVA DES加密(DES/ECB/PKCS5Padding)和C#加密对应设置
- android加密DESede/CBC/PKCS5Padding
- android加密DESede/CBC/PKCS5Padding
- C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现【多种语言AES/CBC/PKCS5Padding通用加解密数据】
- DES加密算法Delphi与C#互通(CBC加密模式)
- 和java的DES/ECB/PKCS5Padding相同的objc实现方式
- java和.net相互http请求并且经过des的cbc模式加密解密(转)
- java和iOS的DES/EBC/PKCS5Padding
- 3DES 和 ECB CBC 加密方式
- 3DES 和 ECB CBC 加密方式
- 3DES 和 ECB CBC 加密方式
- SSH-----Struts2的Action开发方式
- 朴素贝叶斯分类算法(Naive Bayes Classifier)
- bzoj 1101: [POI2007]Zap
- 表单struts2上传 不可缺少属性
- codeforces 485D (RMQ)
- Javascript与java相同的3des加密(使用etdesede/CBC/PKCS5Padding )
- java获取当前tomcat进程(linux)
- 【媒体流】libx264 将rgb24格式转换为h264
- CodeForces 571B Minimization(dp)
- 算法训练 特殊的数字四十
- 算法的时间复杂度和空间复杂度-总结
- 微信公众平台开发入门教程
- 如何在eclipse中开发flume
- Hibernate 5.2版本以前的Criteria查询