pad-app/common/crypto.js

39 lines
1.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import * as CryptoJS from 'crypto-js/crypto-js';
// 工具类
const CryptoUtil = require('crypto-js')
// 约定密钥(与后端密钥保持一致)
const key = CryptoUtil.enc.Utf8.parse('C0Bb0RsnNZYf8XQtcgdfcpuHw2JBTV9A') // 密钥16位长度字符 内容可自定义
const IV = CryptoUtil.enc.Utf8.parse('fc6cb288893f45be') // 密钥偏移量 16位长度字符
/**
* AES对称加密 CBC模式需要偏移量
* @param {Object} params 明文参数
*/
export function encrypt(params) {
// 明文参数
const str = CryptoUtil.enc.Utf8.parse(params)
// 加密
const encryptedData = CryptoUtil.AES.encrypt(str, key, {
iv: IV,
mode: CryptoUtil.mode.CBC, // AES加密模式
padding: CryptoUtil.pad.Pkcs7 // 填充方式
})
return CryptoUtil.enc.Base64.stringify(encryptedData.ciphertext) // 返回base64格式密文
}
/**
* AES对称解密
* @param {Object} params 加密参数
*/
export function decrypt(params) {
// base64格式密文转换
const base64 = CryptoUtil.enc.Base64.parse(params)
const str = CryptoUtil.enc.Base64.stringify(base64)
// 解密
const decryptedData = CryptoUtil.AES.decrypt(str, key, {
iv: IV,
mode: CryptoUtil.mode.CBC, // AES加密模式
padding: CryptoUtil.pad.Pkcs7 // 填充方式
})
return CryptoUtil.enc.Utf8.stringify(decryptedData).toString() // 返回明文
}