Javascript与java相同的3des加密(使用etdesede/CBC/PKCS5Padding )

在某个项目中,需要开发一个与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.js

var 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('key');
var encrypted = CryptoJS.TripleDES.encrypt(message, keyHex, {    
iv:CryptoJS.enc.Utf8.parse('01234567'),    
mode: CryptoJS.mode.CBC,    
padding: CryptoJS.pad.Pkcs7});
console.log(encrypted);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述 之前一直对加密相关的算法知之甚少,只知道类似DES、RSA等加密算法能对数据传输进行加密,且各种加密算法各有...
    Henryzhu阅读 3,055评论 0 14
  • 1. ASCII 编码 ASCII(American Standard Code for Information ...
    s酸菜阅读 8,740评论 0 8
  • 介绍 加密和解密都使用同一把秘钥,这种加密方法称为对称加密,也称为单密钥加密。简单理解为:加密解密都是同一把钥匙 ...
    Blizzard_liu阅读 838评论 0 1
  • “爆竹声中一岁除,春风送暖入屠苏。千门万户曈曈日,总把新桃换旧符”,这首十分经典的诗《元日》,一直是我所认为...
    宋昊妖怪阅读 258评论 0 0
  • 今年,六小龄童不上春晚,噢不是,是上不了春晚,结果春晚导演招来网友的一片骂声。在这里我不想多说什么,只是看到娱乐圈...
    阿枚阅读 330评论 3 11