vue项目中使用aes.js加密及解密

一、安装crypto-js依赖

npm install crypto-js --save-dev

二、创建配置文件AES.js

AES.js(utils/AES.js)

import CryptoJS from 'crypto-js'
const keyStr = '1grLx91U40VawzhRAm7E' // 秘钥
export default {
  // 加密
  encrypt(word) {
    // 判断是否存在keyStr,不存在就用默认的keyStr(注意:这个keyStr必需要前后端统一,不然双方加密解密后会不相同。调用generatekey方法生成)
    // keyStr = keyStr ? keyStr : '1grLx91U40VawzhRAm7E'
    const key = CryptoJS.enc.Utf8.parse(keyStr)
    const srcs = CryptoJS.enc.Utf8.parse(word)
    const encrypted = CryptoJS.AES.encrypt(srcs, key, {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7
    })
    return encrypted.toString()
  },
  // AES的ECB加密(还有CBC模式)
  encryptECB(word) {
    // 这里是密钥
    var keyHex = CryptoJS.enc.Utf8.parse(keyStr)
    // 这里是demo样本 一些是json,
    // var plaintText = "{'a':'SSS'}"
    // 一些是string
    var plaintText = word

    // 用ECB进行加密
    var encryptedData = CryptoJS.AES.encrypt(
      // JSON.stringify(plaintText),
      plaintText,
      keyHex,
      {
        iv: CryptoJS.enc.Utf8.parse('0000000000000000'), // 16位
        mode: CryptoJS.mode.ECB, // 加密模式
        padding: CryptoJS.pad.Pkcs7
      })
    // 打印出加密后的
    console.log(encryptedData.toString(), '加密后')
    // 再进行一些加工加密
    encryptedData = encryptedData.ciphertext.toString()
    // 转出Hex的 (这一步是因为加密后位数必须是3的倍数,如果不是用‘=’补齐,
    // 当存在“=”时,后端可能需要其他处理,为方便后端使用Hex转为16进制)
    return CryptoJS.enc.Hex.parse(encryptedData)
  },

  // 解密
  decrypt(word) {
    // 这里是密钥
    var keyHex = CryptoJS.enc.Utf8.parse(keyStr)
    // 这里需要将16进制的数据转为base64
    var encryptedBase64Str = CryptoJS.enc.Hex.parse(word)
    // console.log('解密前Base64:' + encryptedBase64Str)
    var str = CryptoJS.enc.Base64.stringify(encryptedBase64Str)
    // 接下来就是解密了,讲最后Base64形式的进行解密
    var decryptedData = CryptoJS.AES.decrypt(
      str,
      keyHex,
      {
        iv: CryptoJS.enc.Hex.parse('0000000000000000'), // 16位
        mode: CryptoJS.mode.ECB, // 加密模式
        padding: CryptoJS.pad.Pkcs7
      }
    )
    // 这里会产生制表符需要清除掉(如果解密后数据少于16位会以空格补齐)
    return decryptedData.toString(CryptoJS.enc.Utf8).replace(/\0/g, '')
  }
}

三、使用

<template>
  <div>
  	<button onclick="encrypt">加密</button>
    <button onclick="decode">解密</button>
  </div>
</template>
<script>
  import AES from '@/utils/AES.js'
  export default {
    data () {
      return {
        str: '测试加密与解密',
        encryptStr: null
      }
    },
    methods: {
		encrypt() {
			this.encryptStr = AES.encryptECB(this.str)
			console.log(this.encryptStr)
		},
		decode() {
			console.log(AES.decode(this.encryptStr))
		},
	}
  }
</script>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xuelong-ming

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值