使用 crypto-js 进行加密和解密

网页开发中有一些隐私数据不能明文展示或者存储,比如用户个人信息等。这个时候就需要对这些敏感信息进行加密解密处理,前端中比较常见使用到的是 crypto-js 这一加密库和 AES 加密算法(目前常见的较流行的加密算法)。

本文介绍如何使用 crypto-js 进行加密和解密。

示例

以一个简单的加密和解密示例,只需要调用 CryptoJS.AES.encryptCryptoJS.AES.decrypt 即可实现 AES 加密解密,需要传入相对应的密钥。

javascript 复制代码
const CryptoJS = require("crypto-js");

// 加密
const message = "Hello, World!";
const secretKey = "MySecretKey";
const encryptedMessage = CryptoJS.AES.encrypt(message, secretKey).toString();

// 解密
const decryptedBytes = CryptoJS.AES.decrypt(encryptedMessage, secretKey);
const decryptedMessage = decryptedBytes.toString(CryptoJS.enc.Utf8);

console.log("Encrypted Message:", encryptedMessage);
console.log("Decrypted Message:", decryptedMessage);

输出:

bash 复制代码
Encrypted Message: U2FsdGVkX18G/2dkfUWj+rYa4e62g6UiLDZgvmsDJj8=
Decrypted Message: Hello, World!

封装成可复用的方法

我们将加密和解密方法进行一层封装,传入一些自定义的预制选项(如密钥长度,modepadding),可以方便后续在不同地方代码复用和快速实现加密解密。

typescript 复制代码
/**
 * 加密
 * @param {string} str 需要加密的数据
 * @param {string} secret 密钥
 * @returns
 */
export function encrypt(str: string, secret: string) {
  const cryptoKey = CryptoJS.enc.Utf8.parse(secret);
  const cryptoOption = {
    iv: CryptoJS.enc.Utf8.parse(secret.substring(0, 16)),
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7,
  };
  const encryptedStr = CryptoJS.AES.encrypt(str, cryptoKey, cryptoOption).toString();
  return encryptedStr;
}

/**
 * 解密
 * @param {string} str 需要解密的数据
 * @param {string} secret 密钥
 * @returns
 */
export function decrypt(str: string, secret: string) {
  const cryptoKey = CryptoJS.enc.Utf8.parse(secret);
  const cryptoOption = {
    iv: CryptoJS.enc.Utf8.parse(secret.substring(0, 16)),
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7,
  };
  const decryptedStr = CryptoJS.AES.decrypt(str, cryptoKey, cryptoOption).toString(
    CryptoJS.enc.Utf8,
  );
  return decryptedStr;
}

其他更多用法

除了 AES 加密解密外,crypto-js 还提供了很多其他的加密算法和功能,可根据不同的需求进行使用。具体可以参考 文档

javascript 复制代码
var hash = CryptoJS.MD5("Message");
var hash = CryptoJS.SHA1("Message");
var hash = CryptoJS.SHA256("Message");

注意: crypto-js 是一个 JavaScript 实现的加密库,前端存储密钥和加密解密数据并非完全安全,在一些安全性要求较高的场景中,可能需要额外的考虑。

参考链接

相关推荐
高木的小天才8 分钟前
鸿蒙中的并发线程间通信、线程间通信对象
前端·华为·typescript·harmonyos
Danta1 小时前
百度网盘一面值得look:我有点难受🤧🤧
前端·javascript·面试
OpenTiny社区1 小时前
TinyVue v3.22.0 正式发布:深色模式上线!集成 UnoCSS 图标库!TypeScript 类型支持全面升级!
前端·vue.js·开源
dwqqw1 小时前
opencv图像库编程
前端·webpack·node.js
Captaincc2 小时前
为什么MCP火爆技术圈,普通用户却感觉不到?
前端·ai编程
海上彼尚3 小时前
使用Autocannon.js进行HTTP压测
开发语言·javascript·http
阿虎儿3 小时前
MCP
前端
layman05283 小时前
node.js 实战——(fs模块 知识点学习)
javascript·node.js
毕小宝3 小时前
编写一个网页版的音频播放器,AI 加持,So easy!
前端·javascript
万水千山走遍TML3 小时前
JavaScript性能优化
开发语言·前端·javascript·性能优化·js·js性能