下面我就为你讲解在vue项目中使用AES实现密码加密解密的完整攻略。

简介

AES是一种对称加密算法,加密解密使用相同的密钥。在前后端交互中,经常需要对数据进行加密,以保证数据传输的安全性。本文将介绍如何在vue项目中使用AES实现密码加密解密。

安装依赖

在vue项目中使用AES需要安装crypto-js这个库,可以通过npm安装:

npm install crypto-js --save

加密解密

ECB模式

ECB模式是最基本的分组加密模式,将明文分成固定长度的组,然后对每一组进行加密。

import CryptoJS from 'crypto-js'

/**
 * ECB模式加密
 * @param {string} data 待加密的数据
 * @param {string} key 密钥
 * @returns {string} 加密后的数据
 */
export function encryptionECB(data, key) {
  const keyHex = CryptoJS.enc.Utf8.parse(key)
  const srcs = CryptoJS.enc.Utf8.parse(data)
  const encrypted = CryptoJS.AES.encrypt(srcs, keyHex, {
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7
  })
  return encrypted.toString()
}

/**
 * ECB模式解密
 * @param {string} data 待解密的数据
 * @param {string} key 密钥
 * @returns {string} 解密后的数据
 */
export function decryptionECB(data, key) {
  const keyHex = CryptoJS.enc.Utf8.parse(key)
  const decrypt = CryptoJS.AES.decrypt(data, keyHex, {
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7
  })
  return decrypt.toString(CryptoJS.enc.Utf8)
}

CBC模式

CBC模式需要一个初始化向量,在加密时使用前一个密文块与当前明文块进行异或操作。CBC模式的安全性比ECB模式更高。

import CryptoJS from 'crypto-js'

/**
 * CBC模式加密
 * @param {string} data 待加密的数据
 * @param {string} key 密钥
 * @param {string} iv 初始化向量
 * @returns {string} 加密后的数据
 */
export function encryptionCBC(data, key, iv) {
  const keyHex = CryptoJS.enc.Utf8.parse(key)
  const ivHex = CryptoJS.enc.Utf8.parse(iv)
  const srcs = CryptoJS.enc.Utf8.parse(data)
  const encrypted = CryptoJS.AES.encrypt(srcs, keyHex, {
    iv: ivHex,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
  })
  return encrypted.toString()
}

/**
 * CBC模式解密
 * @param {string} data 待解密的数据
 * @param {string} key 密钥
 * @param {string} iv 初始化向量
 * @returns {string} 解密后的数据
 */
export function decryptionCBC(data, key, iv) {
  const keyHex = CryptoJS.enc.Utf8.parse(key)
  const ivHex = CryptoJS.enc.Utf8.parse(iv)
  const decrypt = CryptoJS.AES.decrypt(data, keyHex, {
    iv: ivHex,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
  })
  return decrypt.toString(CryptoJS.enc.Utf8)
}

示例

以下是一个使用ECB模式加密解密的示例:

import { encryptionECB, decryptionECB } from '@/utils/aes'

const key = 'abcdef0123456789' // 密钥

const plainText = 'Hello, world!' // 明文

// 加密
const cipherText = encryptionECB(plainText, key)
console.log('密文:', cipherText)

// 解密
const decryptedText = decryptionECB(cipherText, key)
console.log('解密后的明文:', decryptedText)

以下是一个使用CBC模式加密解密的示例:

import { encryptionCBC, decryptionCBC } from '@/utils/aes'

const key = 'abcdef0123456789' // 密钥
const iv = '1234567890abcdef' // 初始化向量

const plainText = 'Hello, world!' // 明文

// 加密
const cipherText = encryptionCBC(plainText, key, iv)
console.log('密文:', cipherText)

// 解密
const decryptedText = decryptionCBC(cipherText, key, iv)
console.log('解密后的明文:', decryptedText)

以上就是在vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)的完整攻略,希望对你有帮助。

转自:https://pythonjishu.com/tdanigxcrjbzfdf/