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

本文介绍了如何在JavaScript前端与Java后端实现一致的3DES加密。通过使用CryptoJS库和正确的加密模式、填充方式,最终实现了跨平台的加密算法同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值