前端DES加密解密(.net/java等后端语言中的CBC模式/ECB模式,双模式使用方法)

背景:窝点后端是.net,要对登录请求数据加密,接收数据解密,讨论到用什么方式,后端宝直接就说DES,嗯...说实话当时听都没听过...然后开始懵逼版百度,找了很久有DES解密方法,可是居然解不出,看到都是java端,咱这.net端怎么也解不了呢,后来发现DES解密不只有一种模式的,找到的一直解的都是ECB模式,CBC模式才是.net默认模式,可是怎么办找不到,于是把ECB模式解密的crypto-js.js拿到看原文,查询下CBC,哇瞬间幸福感,原来加iv偏移量,把模式更改为CBC,就可以了,当中我也发现CBC还有明显区别就是自己做了base64加密解密的....废话不多说了,走解决流程:

首先下载crypto-js解密加密工具

前端DES加密解密(.net/java等后端语言中的CBC模式/ECB模式,双模式使用方法)_第1张图片

1、npm下载即可

npm install crypto-js

2、拿到crypto-js.js引入到相关解密加密区即可

咱们需要的工具准备好了。搬好小板凳,给大家科普一下加密算法DES的CBC模式/ECB模式

  • ECB模式:电子密本方式,JAVA封装的DES算法的默认模式
  • CBC模式:密文分组链接方式,.NET封装的DES算法的默认模式

嗯...知道这些就够了,你们也没耐心看字,代码才最重要。咱对号选方式就行,看后端是啥咱就用啥。

直接上代码:

    // DES加密模式:CBC模式/ECB模式

    // CBC模式

    // 加密
    function encryptCBC(text, textKey) {
      // 密钥转成16进制的字符串
      var key = CryptoJS.enc.Utf8.parse(textKey);
      // 加密过程
      var encrypted = CryptoJS.DES.encrypt(text, key, {
        // iv偏移量为key值
        iv: key,
        // 模式为CBC
        mode: CryptoJS.mode.CBC,
        // DES加密padding为Pkcs7
        padding: CryptoJS.pad.Pkcs7
      });
      // 加密返回为字符串密文(加密经过一次base64加密,结果可看结果)
      return encrypted.toString();
    }

    // 解密
    function decryptCBC(cipherText, textKey) {
      var key = CryptoJS.enc.Utf8.parse(textKey);
      var decrypt = CryptoJS.DES.decrypt(cipherText, key, {
        iv: key,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
      });
      // 解密返回转为UTF-8明文(解密也经过一次base64解密)
      return decrypt.toString(CryptoJS.enc.Utf8);
    }


    // ECB模式 (此模式可详细看大佬文章:https://blog.csdn.net/vv_bug/article/details/71435417)

    // 加密
    function encryptECB(text, textKey) {
      //把私钥转换成16进制的字符串
      var key = CryptoJS.enc.Utf8.parse(textKey);
      //模式为ECB padding为Pkcs7
      var encrypted = CryptoJS.DES.encrypt(text, key, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
      });
      //加密出来是一个16进制的字符串
      return encrypted.ciphertext.toString();

    }

    // 解密
    function decryptECB(ciphertext, textKey) {
      //把私钥转换成16进制的字符串
      var key = CryptoJS.enc.Utf8.parse(textKey);
      //把需要解密的数据从16进制字符串转换成字符byte数组
      var decrypted = CryptoJS.DES.decrypt({
        ciphertext: CryptoJS.enc.Hex.parse(ciphertext)
      }, key, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
      });
      //以utf-8的形式输出解密过后内容
      return decrypted.toString(CryptoJS.enc.Utf8);
    }

测试一下结果看看:

控制台结果:(提示:CBC模式自己做了一次base64加密,解密也会自己进行)

自己试试如果不知道正确与否,再提供一个测试网站:http://tool.chacuo.net/cryptdes

好了前端DES的加密解密就说到,希望能帮到你。

更多详情的加密方式,推荐此篇文章^-^ https://blog.csdn.net/guxingsheng/article/details/84451573

 

你可能感兴趣的:(小墨微记录)