• crypto-js DES加密 base64 post传输


    演示地址:
    http://pengchenggang.gitee.io/crypto-js-des/

    开源地址:
    https://gitee.com/pengchenggang/crypto-js-des

    需求: 前后台进行加密传输

    建立个vue3的项目,进行测试crypto-js
    为了演示方便 再装个 element-plus

    vue create des-study
    npm install crypto-js --save
    npm install element-plus --save
    

    坑点1:加密配置项 主要是和java后台配合 ECB pkcs7padding key base64 utf8 (注意这里的base64 里面是含有+号的,post传输会丢失,要再进行一次base64的单独编码)
    坑点2:key就前8位 有作用,我估计可能跟iv有关系

    上代码
    srcApp.vue

    <template>
      <div id="app-des">
        <el-card class="box-card">
          app-des-study-base64
        </el-card>
    
        <el-row :gutter="10">
          <el-col :span="10">
            <el-input type="textarea"
                      :rows="13"
                      placeholder="请输入内容"
                      v-model="leftValueBase64">
            </el-input>
          </el-col>
          <el-col :span="4"
                  style="text-align:center;">
            <div style="height:10px;"></div>
            <el-button type="primary"
                       @click="encryptHandleBase64">encryptBase64</el-button>
            <div style="height:10px;"></div>
            <el-button type="primary"
                       @click="decryptHandleBase64">decryptBase64</el-button>
          </el-col>
          <el-col :span="10">
            <el-input type="textarea"
                      :rows="13"
                      placeholder="请输入内容"
                      v-model="rightValueBase64">
            </el-input>
          </el-col>
        </el-row>
    
        <div style="height:10px;"></div>
    
        <el-card class="box-card">
          <template #header>
            <div class="clearfix">
              <span>interpretative statement</span>
            </div>
          </template>
          <div>
            <div>需求:用DES的方式进行加密解密,通过post进行传参</div>
            <div>方案:crypto-js 进行DES加密 Pkcs7 Utf8 和密码进行加密,初始java后台用Pkcs5,后经讨论Pkcs7也是ok的。最后加一个密码</div>
          </div>
        </el-card>
      </div>
    </template>
    
    <script>
    import * as CryptoDES from './crypto-js-des'
    export default {
      name: 'App',
      setup () {
      },
      data () {
        return {
          leftValueBase64: '',
          rightValueBase64: '',
        }
      },
      methods: {
        encryptHandleBase64 () {
          this.rightValueBase64 = CryptoDES.encryptByBase64DES(this.leftValueBase64)
        },
        decryptHandleBase64 () {
          this.leftValueBase64 = CryptoDES.decryptByBase64DES(this.rightValueBase64)
        }
      }
    }
    </script>
    
    <style>
    #app {
      font-family: Avenir, Helvetica, Arial, sans-serif;
      -webkit-font-smoothing: antialiased;
      -moz-osx-font-smoothing: grayscale;
      color: #2c3e50;
      margin-top: 10px;
    }
    .box-card {
      margin-bottom: 10px;
    }
    </style>
    
    

    srccrypto-js-des.js

    import CryptoJS from "crypto-js";
    
    const key = 'yourKeyStr' // The first 8 passwords are valid
    //DES 加密
    function encryptByDES (message) {
      const keyHex = CryptoJS.enc.Utf8.parse(key);
      const encrypted = CryptoJS.DES.encrypt(message, keyHex, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
      });
      return encrypted.ciphertext.toString(CryptoJS.enc.Base64);
    }
    
    //DES 解密
    function decryptByDES (ciphertext) {
      const keyHex = CryptoJS.enc.Utf8.parse(key);
      const decrypted = CryptoJS.DES.decrypt({
        ciphertext: CryptoJS.enc.Base64.parse(ciphertext)
      }, keyHex, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
      });
      return decrypted.toString(CryptoJS.enc.Utf8);
    }
    
    function strToBase64 (rawStr) {
      const wordArray = CryptoJS.enc.Utf8.parse(rawStr);
      const base64 = CryptoJS.enc.Base64.stringify(wordArray);
      return base64
    }
    
    function base64ToStr (base64) {
      const parsedWordArray = CryptoJS.enc.Base64.parse(base64);
      const parsedStr = parsedWordArray.toString(CryptoJS.enc.Utf8);
      return parsedStr
    }
    
    export function encryptByBase64DES (paramStr) {
      const des = encryptByDES(paramStr)
      return strToBase64(des)
    }
    
    export function decryptByBase64DES (base64Str) {
      const str = base64ToStr(base64Str)
      return decryptByDES(str)
    }
    
  • 相关阅读:
    MySQL数据库详解(二)执行SQL更新时,其底层经历了哪些操作?
    MySQL数据库详解(一)执行SQL查询语句时,其底层到底经历了什么?
    网页静态化解决方案Freemarker
    好久没来看看了~
    springmvc(五) 数据回显与自定义异常处理器
    springmvc(四) springmvc的数据校验的实现
    springmvc(三) 参数绑定、
    springmvc(二) ssm框架整合的各种配置
    springmvc(一) springmvc框架原理分析和简单入门程序
    cursor:pointer 什么意思?
  • 原文地址:https://www.cnblogs.com/pengchenggang/p/14281396.html
Copyright © 2020-2023  润新知