美文网首页我爱编程程序员
js加解密与后端联调

js加解密与后端联调

作者: 绚烂如初 | 来源:发表于2018-08-09 16:10 被阅读36次

公司要求前端html页面,像后台发送数据的时候,进行加解密(DES、base64)和签名(md5),就在网上查了各种资料,遇到的问题和解决方法如下:
常用加解密类js下载地址:https://cdnjs.com/libraries/crypto-js

1)前端自己加解密过程走通

公司文档要求,先做des加密,在做base64转码,并用md5签名

    <script src="script/base64.js"></script>
    <script src="script/md5.js"></script>
    <script src="script/crypto-js.js"></script>

按照文档的加解密前端调通(秘钥必须为:8/16/32位)。
部分代码如下:

des加密:
        var key = "12345678"    
        var str = "admin";
        //加密
        var encrypt = CryptoJS.DES.encrypt(str, CryptoJS.enc.Utf8.parse(key), {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
        }).toString();
        console.log(encrypt);
        //解密
        var decrypt = CryptoJS.DES.decrypt(encrypt, CryptoJS.enc.Utf8.parse(key), {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
        }).toString(CryptoJS.enc.Utf8);
        console.log(decrypt);
输出:
       TMR29YtnGPI=
       admin
base64:
        var str="admin";
        var encryPtBase64 = Base64.encode(encrypt);
        var  decryptBase64 =Base64.decode(encryPtBase64 ,"Unicode");
md5:
       var str="admin";
       var signStr = hex_md5(str);
2)然后从后台找了测试数据进行测试

后台字符串"admin"经des加密和base64转化后得到字符串:
K6CG7IXQGv4=
与前端得到的数据不一致,调试过程中发现,经crypto-js.js进行md5加密的数据上述写法,已经转化为base64格式的,不需要在次进行base64转化,后台采用的加密模式是: mode: CryptoJS.mode.CBC,

        //iv CBC模式下不可省
        //加密
        var key = "12345678"    
        var str = "admin";
        var ivHex = CryptoJS.enc.Utf8.parse(key);
        var encryptStr = CryptoJS.DES.encrypt(str, CryptoJS.enc.Utf8.parse(key), {
            iv:ivHex,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
            }).toString();
        console.log('admin-',encryptStr)
//解密
      var  result = CryptoJS.DES.decrypt(encryptStr, CryptoJS.enc.Utf8.parse(key), {
                                iv:ivHex,
                                mode: CryptoJS.mode.CBC,
                                padding: CryptoJS.pad.Pkcs7
                                }).toString(CryptoJS.enc.Utf8);
        console.log('result---',result);

完成可正常与后端进行加解密

3)单步的des加密

后端des加密的时候,返回的是一个字节数组,前端如下处理可以验证一致性

var desStr=encryptByDESModeCBC('admin');
        console.log('desStr----',desStr);
        //CBC模式加密
        function encryptByDESModeCBC(message) {
            var keyHex = CryptoJS.enc.Utf8.parse('12345678');
            var ivHex = CryptoJS.enc.Utf8.parse('12345678');
            var encrypted = CryptoJS.DES.encrypt(message, keyHex, {
                iv:ivHex,
                mode: CryptoJS.mode.CBC,
                padding:CryptoJS.pad.Pkcs7
                }
            );
            //将字节数组转化成16进制字符串
            return encrypted.ciphertext.toString();
        }

遇到的问题解决,标记一下。

相关文章

  • js加解密与后端联调

    公司要求前端html页面,像后台发送数据的时候,进行加解密(DES、base64)和签名(md5),就在网上查了各...

  • 面试基础知识

    前置知识 所属部门,所做工作,前后端人员配比,前后端文档,接口联调,进入公司工作流程 JS部分 原型,闭包,作用域...

  • 第12章 Vue项目的联调、测试与发布上线

    12-1 Vue项目的联调测试上线--项目前后端联调 当我们项目开发完成后,我们需要和后端进行联调,那么我们需要把...

  • webpack 代理与koa服务 api mockjs 数据

    目的: 解决开发联调中的痛点(存在跨域,不能请求),前端与后端本地联调阻断,webpack 代理转发解决请求 双向...

  • 小程序与后端联调踩坑

    小程序与后端联调踩坑 本次练习是以springboot作为后端开发框架、微信小程序做前端交互。 后端代码截图: s...

  • 前端crypto-js aes加解密

    背景 公司后端加解密使用的是 aes 的方式,当时找了好多前端加解密的库,最后决定使用 crypto-js 封装了...

  • 2017-11-22(TW实习)

    今天主要有下面这几件事 企业信息列表前后端联调 组内session 组内code diff 企业信息列表前后端联调...

  • 初涉Mock数据

    前后端开发联调需要注意哪些事情?后端接口完成前如何 mock 数据? 需要联调的有以下两个方面的资源: css、j...

  • 前后端联调

    问题: 小张同学的项目采用的是前后端分离架构,现在前后端程序猿已经碰过面,协商好了一些前端需要的数据接口,于是前后...

  • 前后端联调

    我们在写前端代码的时候,可能后端接口还没有写好,这个时候,就需要我们自己mock数据,也就是说,前端的数据都是我们...

网友评论

    本文标题:js加解密与后端联调

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