CryptoJS前端加密解密

1,125 阅读1分钟

当然,身为前端,大部分时间是不需要做这些处理的,但是有些特殊情况也会涉及到,起码知道简单的使用。

简单使用

//安装
npm i crypto-js
import CryptoJS from "crypto-js";
/**
 * 加密解密方法
 */
const key = 'key123456' // 密钥

// 加密方法
export const Encrypt = (text) => {
    return CryptoJS.AES.encrypt(text, key).toString();
}

// 解密方法
export const Decrypt = (text) => {
    const bytes = CryptoJS.AES.decrypt(text, key);
    return bytes.toString(CryptoJS.enc.Utf8);
}

//使用
Encrypt('哈哈') //加密
Decrypt(加密后的文本) //解密

较全面的加密(携带偏移量)

在vite项目中会出现解密数据为空的问题,其它项目正常

import CryptoJS from "crypto-js";
/**
 * 加密解密方法
 */
const key = 'key12345678' // 密钥
const iv = '12345678' // 密钥偏移量

// 加密方法
export const Encrypt = (text) => {
    var srcs = CryptoJS.enc.Utf8.parse(text)
    var encrypted = CryptoJS.AES.encrypt(srcs, CryptoJS.enc.Utf8.parse(key), {
        iv: CryptoJS.enc.Utf8.parse(iv),
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    })
    return CryptoJS.enc.Base64.stringify(encrypted.ciphertext)
}

// 解密方法
export const Decrypt = (text) => {
    const baseResult = CryptoJS.enc.Base64.parse(text) // Base64解密
    const ciphertext = CryptoJS.enc.Base64.stringify(baseResult) // Base64解密
    const decryptResult = CryptoJS.AES.decrypt(ciphertext, CryptoJS.enc.Utf8.parse(key), { //  AES解密
        iv: CryptoJS.enc.Utf8.parse(iv),
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    })
    const resData = decryptResult.toString(CryptoJS.enc.Utf8).toString()
    return resData
}

简单的通过sha256和base64加密

// SHA256和base64结合的加密方法
export function sha256AndBase64(str) {
  const crypto = require('crypto')
  let hash = crypto.createHash('sha256')
  hash.update(str)
  return hash.digest('base64')
}