Crypto-js 用于 JavaScript (Node.js):完整指南及示例
\n\n在现代 Web 开发中,数据安全是至关重要的方面。无论是存储用户密码、通过网络传输敏感信息,还是保护文件免受未经授权的访问,密码学都是这些过程的基础。Crypto-js 库为 JavaScript 生态系统提供了一套强大且便捷的加密算法,既可在浏览器中运行,也可在 Node.js 环境中使用。
\n\n该库实现了广泛的标准加密功能:对称加密(AES、DES、TripleDES)、哈希(MD5、SHA-1、SHA-256、SHA-512)、HMAC 计算,以及随机数生成和编码处理(Base64、Hex、UTF-8)。Crypto-js 不依赖于操作系统的原生模块,使其成为同构应用程序(可在客户端和服务器端运行的代码)的理想选择。
\n\n在本文中,我们将详细介绍库的安装、主要方法及代码示例,并探讨一个使用 Crypto-js 保护 Web 应用程序数据的实际案例。无论您是初学者还是希望系统化掌握 JavaScript 加密知识的有经验开发者,本文都将为您提供帮助。
\n\n安装
\n\n要在 Node.js 项目中安装 Crypto-js,请在终端中执行以下命令:
\n\nnpm install crypto-js\n\n安装后,您可以将库导入到代码中:
\n\n// 对于 Node.js (CommonJS)\nconst CryptoJS = require("crypto-js");\n\n// 对于 ES Modules (如果 package.json 中使用了 "type": "module")\nimport CryptoJS from "crypto-js";\n\n快速入门:最小工作示例
\n\n让我们从一个最简单的示例开始——使用 AES 算法对字符串进行加密和解密:
\n\nconst CryptoJS = require("crypto-js");\n\n// 原始消息\nconst message = "Hello, Crypto-js!";\n\n// 密钥(在实际应用中应使用强密钥)\nconst secretKey = "my-secret-key-123";\n\n// 加密\nconst ciphertext = CryptoJS.AES.encrypt(message, secretKey).toString();\nconsole.log("加密后的消息:", ciphertext);\n\n// 解密\nconst bytes = CryptoJS.AES.decrypt(ciphertext, secretKey);\nconst decryptedMessage = bytes.toString(CryptoJS.enc.Utf8);\nconsole.log("解密后的消息:", decryptedMessage);\n\n此示例演示了对称加密的基本工作流程:我们将原始文本转换为加密字符串(Base64),然后使用相同的密钥恢复原始消息。
\n\n主要方法/函数/类
\n\n让我们看看 Crypto-js 的关键功能。每个方法都提供了签名、简要说明和可运行的示例。
\n\n1. CryptoJS.AES.encrypt() / CryptoJS.AES.decrypt()
\n\n签名: CryptoJS.AES.encrypt(message, key, [options]) 和 CryptoJS.AES.decrypt(ciphertext, key, [options])
功能: 实现基于 AES(高级加密标准)算法的对称加密和解密。支持 ECB、CBC、CFB、OFB、CTR 模式以及 128/192/256 位密钥长度。
\n\nconst CryptoJS = require("crypto-js");\n\nconst message = "秘密数据";\nconst key = "supersecretkey123";\n\n// 指定模式和 IV(初始化向量)进行加密\nconst iv = CryptoJS.lib.WordArray.random(16); // AES-128 需要 16 字节\nconst encrypted = CryptoJS.AES.encrypt(message, key, {\n iv: iv,\n mode: CryptoJS.mode.CBC,\n padding: CryptoJS.pad.Pkcs7\n}).toString();\n\nconsole.log("加密后 (CBC):", encrypted);\n\n// 解密\nconst decrypted = CryptoJS.AES.decrypt(encrypted, key, {\n iv: iv,\n