crypto-js JavaScript 加密标准库使用指南
crypto-js 是 JavaScript 的加密标准库,支持浏览器和 Node.js 环境。文章介绍了其基本概念、安装方法、核心算法(如 MD5、SHA256、AES)的使用方式及高级配置。内容涵盖用户密码存储、API 请求加密、本地存储加密等实际应用场景,并提供了安全注意事项与最佳实践,对比了 Web Crypto API,帮助开发者快速实现安全的加密功能。

crypto-js 是 JavaScript 的加密标准库,支持浏览器和 Node.js 环境。文章介绍了其基本概念、安装方法、核心算法(如 MD5、SHA256、AES)的使用方式及高级配置。内容涵盖用户密码存储、API 请求加密、本地存储加密等实际应用场景,并提供了安全注意事项与最佳实践,对比了 Web Crypto API,帮助开发者快速实现安全的加密功能。

你是否也遇到过这样的情况?
如果你的答案是'是',那么恭喜你,你已经成功加入 JavaScript 加密开发者的行列。
crypto-js 是什么?它是 JavaScript 的标准加密库,提供了各种加密算法的实现,让你可以在浏览器和 Node.js 环境中轻松实现加密功能。再也不用担心加密算法的复杂实现了!让机器去做这些烦人的事情,你只管写代码。
crypto-js 是一个 JavaScript 加密库,提供了各种加密算法的标准实现,包括:
crypto-js 诞生的原因:
// 引入 crypto-js
const CryptoJS = require("crypto-js");
// MD5 哈希
const md5Hash = CryptoJS.MD5("Hello World").toString();
console.log("MD5:", md5Hash);
// SHA256 哈希
const sha256Hash = CryptoJS.SHA256("Hello World").toString();
console.log("SHA256:", sha256Hash);
// AES 加密
const secretKey = "my-secret-key";
const plaintext = "Hello World";
const ciphertext = CryptoJS.AES.encrypt(plaintext, secretKey).toString();
console.log("AES 加密:", ciphertext);
// AES 解密
const bytes = CryptoJS.AES.decrypt(ciphertext, secretKey);
const decrypted = bytes.toString(CryptoJS.enc.Utf8);
console.log("AES 解密:", decrypted);
npm install crypto-js
// 引入整个库
const CryptoJS = require("crypto-js");
// 或者按需引入
const SHA256 = require("crypto-js/sha256");
const AES = require("crypto-js/aes");
const encUtf8 = require("crypto-js/enc-utf8");
// 哈希计算
const hash = SHA256("Hello World").toString();
console.log("SHA256 Hash:", hash);
// AES 加密解密
const secretKey = "my-secret-key";
const encrypted = AES.encrypt("Hello World", secretKey).toString();
const decrypted = AES.decrypt(encrypted, secretKey).toString(encUtf8);
console.log("Encrypted:", encrypted);
console.log("Decrypted:", decrypted);
const CryptoJS = require("crypto-js");
// 自定义 AES 配置
const message = "Hello World";
const key = CryptoJS.enc.Utf8.parse("1234567890123456"); // 16 位密钥
const iv = CryptoJS.enc.Utf8.parse("1234567890123456"); // 16 位初始向量
// 加密
const encrypted = CryptoJS.AES.encrypt(message, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
console.log("密文:", encrypted.toString());
// 解密
const decrypted = CryptoJS.AES.decrypt(encrypted, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
console.log(, decrypted.(..));
const CryptoJS = require("crypto-js");
const message = "Hello World";
// MD5
console.log("MD5:", CryptoJS.MD5(message).toString());
// SHA1
console.log("SHA1:", CryptoJS.SHA1(message).toString());
// SHA256
console.log("SHA256:", CryptoJS.SHA256(message).toString());
// SHA512
console.log("SHA512:", CryptoJS.SHA512(message).toString());
const CryptoJS = require("crypto-js");
const message = "Hello World";
const secretKey = "my-secret-key";
// AES 加密
const encrypted = CryptoJS.AES.encrypt(message, secretKey).toString();
console.log("AES 加密:", encrypted);
// AES 解密
const decrypted = CryptoJS.AES.decrypt(encrypted, secretKey);
console.log("AES 解密:", decrypted.toString(CryptoJS.enc.Utf8));
// DES 加密
const desEncrypted = CryptoJS.DES.encrypt(message, secretKey).toString();
console.log("DES 加密:", desEncrypted);
// DES 解密
const desDecrypted = CryptoJS.DES.decrypt(desEncrypted, secretKey);
console.log("DES 解密:", desDecrypted.toString(CryptoJS.enc.Utf8));
const CryptoJS = require("crypto-js");
const message = "Hello World";
// Base64 编码
const base64Encoded = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(message));
console.log("Base64 编码:", base64Encoded);
// Base64 解码
const base64Decoded = CryptoJS.enc.Base64.parse(base64Encoded).toString(CryptoJS.enc.Utf8);
console.log("Base64 解码:", base64Decoded);
// Hex 编码
const hexEncoded = CryptoJS.enc.Hex.stringify(CryptoJS.enc.Utf8.parse(message));
console.log("Hex 编码:", hexEncoded);
// Hex 解码
const hexDecoded = CryptoJS.enc.Hex.parse(hexEncoded).toString(CryptoJS.enc.);
.(, hexDecoded);
数据流程通常如下:原始数据 -> crypto-js 处理(哈希/加密/编码)-> 安全传输或存储。
const CryptoJS = require("crypto-js");
// 用户注册时加密密码
function hashPassword(password) {
// 使用 SHA256 + 盐值
const salt = "my-salt-value";
return CryptoJS.SHA256(password + salt).toString();
}
// 验证密码
function verifyPassword(inputPassword, storedHash) {
const hashedInput = hashPassword(inputPassword);
return hashedInput === storedHash;
}
const userPassword = "mySecretPassword123";
const hashedPassword = hashPassword(userPassword);
console.log("加密后的密码:", hashedPassword);
const CryptoJS = require("crypto-js");
// 加密请求参数
function encryptData(data, secretKey) {
return CryptoJS.AES.encrypt(JSON.stringify(data), secretKey).toString();
}
// 解密响应数据
function decryptData(encryptedData, secretKey) {
const bytes = CryptoJS.AES.decrypt(encryptedData, secretKey);
return JSON.parse(bytes.toString(CryptoJS.enc.Utf8));
}
// 使用示例
const apiData = { username: "john", email: "[email protected]" };
const secretKey = "api-secret-key";
const encrypted = encryptData(apiData, secretKey);
console.log("加密数据:", encrypted);
const decrypted = decryptData(encrypted, secretKey);
console.log("解密数据:", decrypted);
const CryptoJS = require("crypto-js");
// 加密存储
function setEncryptedItem(key, value, secretKey) {
const encrypted = CryptoJS.AES.encrypt(JSON.stringify(value), secretKey).toString();
localStorage.setItem(key, encrypted);
}
// 解密读取
function getEncryptedItem(key, secretKey) {
const encrypted = localStorage.getItem(key);
if (!encrypted) return null;
try {
const bytes = CryptoJS.AES.decrypt(encrypted, secretKey);
return JSON.parse(bytes.toString(CryptoJS.enc.Utf8));
} catch (error) {
console.error("解密失败:", error);
return null;
}
}
// 使用示例
const userData = { name: "John", token: "abc123" };
const secretKey = "local-storage-key";
(, userData, secretKey);
retrievedData = (, secretKey);
.(, retrievedData);
| 问题类型 | 说明 | 解决方案 |
|---|---|---|
| ❌ 硬编码密钥 | 在代码中直接写密钥 | 使用环境变量或配置管理 |
| ❌ 弱加密算法 | 使用 MD5、DES 等弱算法 | 使用 AES-256、SHA-256 等强算法 |
| ❌ 重复使用密钥 | 多处使用相同密钥 | 为不同用途生成不同密钥 |
| ❌ 明文传输 | 通过 HTTP 传输敏感数据 | 使用 HTTPS 加密传输 |
const CryptoJS = require("crypto-js");
class SecureCrypto {
constructor(secretKey) {
// 使用 PBKDF2 派生密钥
this.key = CryptoJS.PBKDF2(secretKey, "salt", { keySize: 256 / 32, iterations: 1000 });
}
encrypt(data) {
const iv = CryptoJS.lib.WordArray.random(128 / 8);
const encrypted = CryptoJS.AES.encrypt(JSON.stringify(data), this.key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
// 将 IV 和密文一起返回
return iv.toString() + encrypted.toString();
}
decrypt(encryptedData) {
const iv = CryptoJS.enc..(encryptedData.(, ));
ciphertext = encryptedData.();
decrypted = ..(ciphertext, ., {
: iv,
: ..,
: ..
});
.(decrypted.(..));
}
}
crypto = ();
data = { : };
encrypted = crypto.(data);
decrypted = crypto.(encrypted);
.(, decrypted);
| 特性 | crypto-js | Web Crypto API |
|---|---|---|
| 兼容性 | 所有环境 | 现代浏览器 |
| 性能 | 一般 | 更快 |
| 使用难度 | 简单 | 复杂 |
| 功能完整性 | 完整 | 部分 |
<!-- CDN 方式 -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>
<script>
const hash = CryptoJS.SHA256("Hello World").toString();
console.log(hash);
</script>
<!-- ES6 模块方式 -->
<script type="module">
import CryptoJS from 'https://cdn.skypack.dev/crypto-js';
const hash = CryptoJS.SHA256("Hello World").toString();
console.log(hash);
</script>
✅ 对于大多数应用场景,crypto-js 的性能是足够的。如果对性能有极高要求,可以考虑:
| 特性 | 支持情况 | 说明 |
|---|---|---|
| 多算法支持 | ✅ 强烈支持 | 支持所有常见加密算法 |
| 易用性 | ✅ 极易使用 | 简单的 API 设计 |
| 跨平台 | ✅ 完全支持 | 浏览器和 Node.js 都支持 |
| 文档完善 | ✅ 很完善 | 详细的文档和示例 |
| 社区支持 | ✅ 很活跃 | 广泛使用和维护 |
加密不是什么黑科技,但它能让你的应用变得无比安全。crypto-js 就是那个帮你搞定一切的'加密专家'。
别再手动实现加密算法了,别再为兼容性头疼了,别再担心安全性问题了!
交给 crypto-js 吧,你只管写代码。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online