微信小程序CryptoJS解析java DES/CBC/PKCS5Padding

这篇博客介绍了如何在微信小程序中使用CryptoJS库进行DES/CBC/PKCS5Padding解密,针对java后台加密的数据。文章提供了java后台的加密代码示例,并强调了js中byte[]与string转换的问题。详细步骤包括CryptoJS库的引入、解密代码的编写以及解决iv转换的关键点。

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

目标

java端采用DES/CBC/PKCS5Padding 加密,前端,小程序 js,如何进行加解密。

js解析库下载地址

原版下载地址

二次开发版本
我用的是二次开发版本.

解决代码

先给结果!如下代码是核心代码,如果看不懂,可以继续往下看 详细步骤解决

java后台端代码

DES/CBC/PKCS5Padding代码如下(写的一个简便的,直接粘贴到 java ide上可运行):

import com.sun.org.apache.xml.internal.security.utils.Base64;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class Des {
    public static void main(String[] args) {
       String result = encryptDES("123456","6eGicG6U");
       System.out.println(result);
    }

    /**
     * 加密 这个iv偏移量是数组!!
     */
    private static byte[] iv = {1, 2, 3, 4, 5, 6, 7, 8};

    public static String encryptDES(String encryptString, String encryptKey) {
        try {
            IvParameterSpec zeroIv = new IvParameterSpec(iv);
            SecretKeySpec key = new SecretKeySpec(encryptKey.getBytes(), "DES");
            System.out.println("key: "+encryptKey.getBytes().toString());
            Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv);
            byte[] encryptedData = cipher.doFinal(encryptString.getBytes());
            return Base64.encode(encryptedData);
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }

    }

    /**
     * 解密
     */
    public static String decryptDES(String decryptString, String decryptKey) {
        try {
            byte[] byteMi = Base64.decode(decryptString);
            IvParameterSpec zeroIv = new IvParameterSpec(iv);
            SecretKeySpec key = new SecretKeySpec(decryptKey.getBytes(), "DES");
            Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, key, zeroIv);
            byte decryptedData[] = cipher.doFinal(byteMi);

            return new String(decryptedData);
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }
}

<
### 微信小程序页面跳转传递DES加密参数的方法 在微信小程序中,为了安全地传递参数,可以使用DES算法对参数进行加密处理后再通过URL路径或查询字符串的方式传递。以下是具体方法: #### 加密准备 首先,在前端部分需要引入`crypto-js`库用于执行DES加解密操作。 ```html <script src="https://cdn.jsdelivr.net/npm/[email protected]/build/rollups/des.js"></script> ``` #### 参数加密过程 定义待加密的数据对象并将其转换为JSON字符串形式以便于后续处理。 ```javascript const dataToEncrypt = { id: '123', name: 'example' }; let paramsString = JSON.stringify(dataToEncrypt); ``` 接着利用CryptoJS中的DES模块按照指定的key和iv(初始化向量) 对上述字符串实施加密: ```javascript function encryptByDes(message, key, iv){ var keyHex = CryptoJS.enc.Utf8.parse(key); var encrypted = CryptoJS.DES.encrypt(message, keyHex, { iv: CryptoJS.enc.Utf8.parse(iv), mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); return encrypted.toString(); } // 使用自定义的key和iv值替换下面两个变量 var secretKey = "yourSecretKey"; var initVector = "yourInitVector"; paramsString = encodeURIComponent(encryptByDes(paramsString ,secretKey,initVector)); ``` 注意这里采用了CBC模式以及PKCS7填充方式,并且对于最终得到的结果进行了编码以适应作为url的一部分[^2]。 #### 跳转携带加密后的参数 完成加密之后就可以正常调用微信小程序API来进行页面间的导航了,比如wx.navigateTo()函数: ```javascript wx.navigateTo({ url: '/pages/targetPage/targetPage?data=' + paramsString, }) ``` 此时目标页面接收到的就是已经过DES加密处理过的参数串。 #### 接收端解析流程 当新页面加载完成后可以从options里获取到传入的参数,再做相应的解码与反序列化工作即可恢复原始数据结构。 ```javascript Page({ onLoad:function(options){ let receivedDataEncrypted=options.data; function decryptByDes(ciphertext, key, iv){ var keyHex = CryptoJS.enc.Utf8.parse(key); var decrypted = CryptoJS.DES.decrypt({ ciphertext: CryptoJS.enc.Base64.parse(ciphertext) }, keyHex,{ iv: CryptoJS.enc.Utf8.parse(iv), mode:CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); return decrypted.toString(CryptoJS.enc.Utf8); } try{ const decodedStr=decodeURIComponent(receivedDataEncrypted); console.log('Decoded:',decodedStr); const originalObj=JSON.parse(decryptByDes(decodedStr,secretKey,initVector)); console.log(originalObj); }catch(error){ console.error("Error during decryption:", error); } }, }) ``` 以上就是整个基于DES算法的安全参数传输机制的设计思路[^3]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值