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

参考链接

相关推荐
夏鹏今天学习了吗1 小时前
【性能优化】前端高性能优化策略
前端·性能优化
weixin_427771614 小时前
css font-size 的妙用
前端·css
凤凰战士芭比Q5 小时前
web中间件——Nginx
前端·nginx·中间件
一 乐5 小时前
点餐|智能点餐系统|基于java+ Springboot的动端的点餐系统小程序(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·小程序·论文
视图猿人5 小时前
RxJS基本使用及在next.js中使用的例子
开发语言·javascript
bitbitDown6 小时前
从零打造一个 Vite 脚手架工具:比你想象的简单多了
前端·javascript·面试
liangshanbo12157 小时前
CSS 数学函数完全指南:从基础计算到高级动画
前端·css
码上成长8 小时前
GraphQL:让前端自己决定要什么数据
前端·后端·graphql
冴羽8 小时前
为什么在 JavaScript 中 NaN !== NaN?背后藏着 40 年的技术故事
前端·javascript·node.js
久爱@勿忘8 小时前
vue下载项目内静态文件
前端·javascript·vue.js