美文网首页
【uniapp】Vue.js CryptoJs 中的 3des

【uniapp】Vue.js CryptoJs 中的 3des

作者: 梦蕊dream | 来源:发表于2021-12-16 09:56 被阅读0次

    最近改写 uniapp 时候用到了 3des 加密解密,网上找了好多资料好多写的都是 des 加解密,3des和des 是有区别的
    DES:Data Encryption Standard(数据加密标准,又美国国密局,选中的IBM的方案,密钥长度为56,标准提出是要使用64位长的密钥,但是实际中DES算法只用了64位中的56位密钥,这一点是容易出错的)
    3DES:trip DES(3级DES,是DES的升级版,主要是为了应对快速发展的计算机能力,能够在24小时内暴力破解传统的56位长度密钥的DES,而3DES相当于对统一数据块采用3次DES,3次DES使用的密钥如果完全不同,则密钥长度可以达到168位,大大延长了被暴力破解的时间)

    1. 安装加密库

    npm install crypto-js --save-dev
    

    或者手动导入工程里加密文件


    加密库

    2. 引入加密库

    import CryptoJS from 'crypto-js'
    

    3. 加密

    注意加密方法是【TripleDES】不是【DES】

    let keyHex = CryptoJS.enc.Utf8.parse('uniapp-cryptojs-tripledes')
    var encrypted = CryptoJS.TripleDES.encrypt ('123456890', keyHex, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7,
        // 偏移量
        // iv: CryptoJS.enc.Utf8.parse(ivstr)
    });
    
    console.log('加密字符串Base64', encrypted.toString());
    console.log('加密字符串', encrypted.ciphertext.toString());
    
    • 【encrypted.toString】输出是 Base64 加密结果
    • 【encrypted.ciphertext.toString】输出的是十六进制的加密结果

    4. 解密

    let keyHex = CryptoJS.enc.Utf8.parse('uniapp-cryptojs-tripledes')
    let decryted = CryptoJS.TripleDES.decrypt ( {
        ciphertext: CryptoJS.enc.Base64.parse(base64)
    }, keyHex, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7,
        // 偏移量
        // iv: CryptoJS.enc.Utf8.parse(ivstr)
    });
    
    console.log('解密字符串',decryted.toString(CryptoJS.enc.Utf8));
    

    解密只支持 Base64 解密方式,如果是16进制的字符串,需要把16进制转换成base64 再解密。

    //第一步把16进制字符串转为WordArray格式
    const WordArray = CryptoJS.enc.Hex.parse(ciphertext);
    //第二步把WordArray再转为base64的字符串
    const base64str = CryptoJS.enc.Base64.stringify(WordArray);
    // 使用 base64str 进行上面的解密操作
    

    5. 测试验证

    好多人写完不知道加密的是否正确,下面提供一个 3des 加密例子

    加密Key :uniapp-cryptojs-tripledes
    原字符串:123456890
    Base64加密字符串:WmrGowJCtUQd/2PgoyrJuQ==
    16进制加密字符串:5a6ac6a30242b5441dff63e0a32ac9b9

    反之,解密后能获取原字符串,即成功了。

    ================ 排雷 ================

    如果你加密是下面的结果,那么就是加密方式错了,注意使用【CryptoJS.TripleDES】而不是【CryptoJS.DES】

    使用DES加密方式的结果

    加密Key :uniapp-cryptojs-tripledes
    原字符串:123456890
    Base64加密字符串:j+MUYRccCbBfTqUIPZdtpQ==
    16进制加密字符串:8fe31461171c09b05f4ea5083d976da5

    相关文章

      网友评论

          本文标题:【uniapp】Vue.js CryptoJs 中的 3des

          本文链接:https://www.haomeiwen.com/subject/vrqpfrtx.html