使用 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 实现的加密库,前端存储密钥和加密解密数据并非完全安全,在一些安全性要求较高的场景中,可能需要额外的考虑。

参考链接

相关推荐
专注API从业者3 小时前
Python + 淘宝 API 开发:自动化采集商品数据的完整流程
大数据·运维·前端·数据挖掘·自动化
你的人类朋友4 小时前
【Node&Vue】JS是编译型语言还是解释型语言?
javascript·node.js·编程语言
烛阴4 小时前
TypeScript高手密技:解密类型断言、非空断言与 `const` 断言
前端·javascript·typescript
样子20185 小时前
Uniapp 之renderjs解决swiper+多个video卡顿问题
前端·javascript·css·uni-app·html
Nicholas685 小时前
flutterAppBar之SystemUiOverlayStyle源码解析(一)
前端
黑客飓风5 小时前
JavaScript 性能优化实战大纲
前端·javascript·性能优化
emojiwoo7 小时前
【前端基础知识系列六】React 项目基本框架及常见文件夹作用总结(图文版)
前端·react.js·前端框架
张人玉7 小时前
XML 序列化与操作详解笔记
xml·前端·笔记
杨荧7 小时前
基于Python的宠物服务管理系统 Python+Django+Vue.js
大数据·前端·vue.js·爬虫·python·信息可视化
YeeWang8 小时前
🎉 Eficy 让你的 Cherry Studio 直接生成可预览的 React 页面
前端·javascript