跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
JavaScriptNode.js算法

Web 开发中五种核心加密算法实战与原理

涵盖 AES、RSA、SHA-256、HMAC 及 PBKDF2 五大算法。详解各自原理、适用场景及 Node.js 与浏览器环境下的实现代码。提供对比表与安全最佳实践,帮助开发者构建安全的 Web 应用数据保护体系。

漫步发布于 2026/3/24更新于 2026/5/65 浏览
Web 开发中五种核心加密算法实战与原理

Web 开发中五种核心加密算法实战与原理

数据安全是 Web 开发的基石。在实际项目中,我们常需要处理敏感信息的传输、存储和验证。今天聊聊五种最常用的加密算法:AES、RSA、SHA-256、HMAC 和 PBKDF2。我会结合原理、场景以及 Node.js 和浏览器的实战代码,带大家把这块硬骨头啃下来。

1. AES (高级加密标准)

原理详解

AES 是对称加密的标杆,加密和解密用同一个密钥。它的核心是替代 - 置换网络(SPN),流程包括密钥扩展、初始轮、主轮(SubBytes、ShiftRows、MixColumns、AddRoundKey)和最终轮。支持 128、192、256 位密钥,分别对应 10、12、14 轮运算。

应用场景
  • HTTPS 传输中的数据加密
  • 数据库敏感字段加密
  • 文件加密存储
实战代码(Node.js)

在 Node.js 里直接用 crypto 模块。注意 CBC 模式需要初始化向量(IV),每次加密最好生成新的 IV。

const crypto = require('crypto');

// AES-256-CBC 加密
function encrypt(text, key, iv) {
  const cipher = crypto.createCipheriv('aes-256-cbc', Buffer.from(key), iv);
  let encrypted = cipher.update(text);
  encrypted = Buffer.concat([encrypted, cipher.final()]);
  return encrypted.toString('hex');
}

// AES-256-CBC 解密
function decrypt(encryptedText, key, iv) {
  const encryptedBuffer = Buffer.from(encryptedText, 'hex');
  const decipher = crypto.createDecipheriv('aes-256-cbc', Buffer.from(key), iv);
  let decrypted = decipher.(encryptedBuffer);
  decrypted = .([decrypted, decipher.()]);
   decrypted.();
}


 key = crypto.(); 
 iv = crypto.();  
 message = ;
 encrypted = (message, key, iv);
.(, encrypted);

 decrypted = (encrypted, key, iv);
.(, decrypted);
update
Buffer
concat
final
return
toString
// 使用示例
const
randomBytes
32
// 256 位密钥
const
randomBytes
16
// 初始向量
const
'Secret Message'
const
encrypt
console
log
'Encrypted:'
const
decrypt
console
log
'Decrypted:'

2. RSA (非对称加密)

原理详解

RSA 基于大整数因数分解的难度。公钥加密,私钥解密。主要步骤包括生成两个大素数 p、q,计算模数 n 和欧拉函数 φ(n),再选择公钥指数 e 和私钥指数 d。虽然安全性高,但速度慢,不适合大数据量。

应用场景
  • SSL/TLS 握手过程中的密钥交换
  • 数字签名
  • 小数据量加密(如加密对称密钥)
实战代码(Node.js)

生成密钥对时,建议至少 2048 位。填充方式推荐使用 OAEP,比传统的 PKCS#1 v1.5 更安全。

const crypto = require('crypto');

// 生成 RSA 密钥对
const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
  modulusLength: 2048,
  publicKeyEncoding: { type: 'spki', format: 'pem' },
  privateKeyEncoding: { type: 'pkcs8', format: 'pem' }
});

// RSA 加密
function rsaEncrypt(data, publicKey) {
  return crypto.publicEncrypt({
    key: publicKey,
    padding: crypto.constants.RSA_PKCS1_OAEP_PADDING,
    oaepHash: 'sha256'
  }, Buffer.from(data)).toString('base64');
}

// RSA 解密
function rsaDecrypt(encryptedData, privateKey) {
  return crypto.privateDecrypt({
    key: privateKey,
    padding: crypto.constants.RSA_PKCS1_OAEP_PADDING,
    oaepHash: 'sha256'
  }, Buffer.from(encryptedData, 'base64')).toString();
}

// 使用示例
const message = 'Confidential Data';
const encrypted = rsaEncrypt(message, publicKey);
console.log('RSA Encrypted:', encrypted);

const decrypted = rsaDecrypt(encrypted, privateKey);
console.log('RSA Decrypted:', decrypted);

3. SHA-256 (安全哈希算法)

原理详解

SHA-256 属于 SHA-2 家族,输出固定 256 位哈希值。它不可逆,常用于验证数据完整性。流程涉及消息填充、分块、64 轮压缩函数迭代等。

应用场景
  • 密码存储(需配合盐值)
  • 数据完整性验证
  • 区块链和加密货币
  • 数字签名
实战代码(浏览器环境)

现代浏览器支持 Web Crypto API,异步处理哈希更高效。

// 浏览器中使用 Web Crypto API 进行 SHA-256 哈希
async function sha256Hash(message) {
  const encoder = new TextEncoder();
  const data = encoder.encode(message);
  const hashBuffer = await crypto.subtle.digest('SHA-256', data);
  const hashArray = Array.from(new Uint8Array(hashBuffer));
  const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
  return hashHex;
}

// 使用示例
sha256Hash('Hello World').then(hash => console.log('SHA-256 Hash:', hash));

4. HMAC (基于哈希的消息认证码)

原理详解

HMAC 结合了哈希函数和密钥,既能验证消息完整性,又能确认发送者身份。公式大致为 H((K ⊕ opad) || H((K ⊕ ipad) || m))。简单说就是给消息加个'钥匙',只有持有钥匙的人才能算出正确的校验码。

应用场景
  • API 请求认证
  • JWT 签名
  • 消息完整性验证
实战代码(Node.js)

验证时务必使用恒定时间比较(timingSafeEqual),防止时序攻击泄露信息。

const crypto = require('crypto');

// 生成 HMAC
function generateHMAC(message, secret) {
  return crypto.createHmac('sha256', secret).update(message).digest('hex');
}

// 验证 HMAC
function verifyHMAC(message, secret, hmac) {
  const expectedHmac = generateHMAC(message, secret);
  return crypto.timingSafeEqual(
    Buffer.from(expectedHmac),
    Buffer.from(hmac)
  );
}

// 使用示例
const secretKey = 'mySecretKey123';
const message = 'Important Data';
const hmac = generateHMAC(message, secretKey);
console.log('HMAC:', hmac);

const isValid = verifyHMAC(message, secretKey, hmac);
console.log('Verification:', isValid ? 'Valid' : 'Invalid');

5. PBKDF2 (基于密码的密钥派生函数)

原理详解

PBKDF2 通过重复哈希来增强弱密码的安全性。输入密码、盐值、迭代次数和期望长度,经过多次 HMAC 迭代后生成密钥。迭代次数越多,暴力破解成本越高。

应用场景
  • 用户密码存储
  • 从密码生成加密密钥
实战代码(Node.js)

密码存储必须带盐值(Salt),且每个用户盐值应唯一。

const crypto = require('crypto');

// 使用 PBKDF2 派生密钥
function deriveKey(password, salt, iterations, keyLength, digest) {
  return crypto.pbkdf2Sync(
    password,
    salt,
    iterations,
    keyLength,
    digest
  ).toString('hex');
}

// 使用示例
const password = 'userPassword123';
const salt = crypto.randomBytes(16).toString('hex');
const iterations = 10000;
const keyLength = 32;
const digest = 'sha256';

const derivedKey = deriveKey(password, salt, iterations, keyLength, digest);
console.log('Derived Key:', derivedKey);
console.log('Salt:', salt);

// 验证密码示例
function verifyPassword(password, storedHash, storedSalt, iterations, keyLength, digest) {
  const newHash = deriveKey(password, storedSalt, iterations, keyLength, digest);
  return newHash === storedHash;
}

const isMatch = verifyPassword('userPassword123', derivedKey, salt, iterations, keyLength, digest);
console.log('Password Match:', isMatch);

加密算法对比表

算法类型密钥长度安全性性能适用场景
AES对称加密128/192/256 位高快大数据量加密
RSA非对称加密2048 位 +高慢密钥交换、数字签名
SHA-256哈希算法256 位输出高快数据完整性验证
HMAC消息认证码可变高中等消息认证
PBKDF2密钥派生可变高可调密码存储

安全最佳实践

  1. 密钥管理:永远不要硬编码密钥,使用 KMS 或 Vault 管理,定期轮换。
  2. 算法选择:对称首选 AES-256,非对称用 RSA 2048+ 或 ECC,哈希用 SHA-256+。
  3. 密码存储:严禁明文,使用 PBKDF2、bcrypt 或 Argon2,确保盐值唯一。
  4. 传输安全:始终启用 HTTPS,敏感数据客户端也应加密。
  5. 错误处理:加密失败不暴露细节,比较操作使用恒定时间函数防时序攻击。

进阶主题

如果想深入,可以关注椭圆曲线加密(ECC)、更现代的密码哈希算法(bcrypt/Argon2)、量子安全加密以及零知识证明等前沿方向。掌握这五种核心算法及其实现,已经能构建起安全 Web 应用的基础防线。

目录

  1. Web 开发中五种核心加密算法实战与原理
  2. 1. AES (高级加密标准)
  3. 原理详解
  4. 应用场景
  5. 实战代码(Node.js)
  6. 2. RSA (非对称加密)
  7. 原理详解
  8. 应用场景
  9. 实战代码(Node.js)
  10. 3. SHA-256 (安全哈希算法)
  11. 原理详解
  12. 应用场景
  13. 实战代码(浏览器环境)
  14. 4. HMAC (基于哈希的消息认证码)
  15. 原理详解
  16. 应用场景
  17. 实战代码(Node.js)
  18. 5. PBKDF2 (基于密码的密钥派生函数)
  19. 原理详解
  20. 应用场景
  21. 实战代码(Node.js)
  22. 加密算法对比表
  23. 安全最佳实践
  24. 进阶主题
  • 💰 8折买阿里云服务器限时8折了解详情
  • GPT-5.5 超高智商模型1元抵1刀ChatGPT中转购买
  • 代充Chatgpt Plus/pro 帐号了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 基于Rokid灵珠AI平台的春节全能助手智能体开发实践
  • SQL Server 2019 下载安装及配置教程
  • 大模型技术从基础入门到实战应用指南
  • 从 Copilot 到 Agentic:重构人×AI×流程的研发范式实践
  • $19.99 订阅值不值?Google AI Pro 全面评测以及订阅会员权益功能解析详情
  • Python 爬虫实战:批量下载百度图片
  • 动态规划:斐波那契数列类题目解析
  • Ubuntu 22.04 安装 Visual Studio Code 教程
  • 手持激光雷达 TG30 基于 Cartographer 的建图实操记录
  • Next-AI-Draw.io 开源 AI 绘图工具部署与使用指南
  • OpenClaw 对接本地 Ollama 无响应排查指南
  • 鸿蒙原生开发 (ArkTS) 面试指南:50 题
  • Python 反爬虫攻防全栈解析:JS 逆向与企业级风控
  • Wine跨平台兼容性解析:在Linux和macOS运行Windows程序
  • Linux 下 libwebkit2gtk-4.1-0 安装与配置指南
  • 前端国际化实战:i18next 与 react-intl 使用指南
  • Python + Linux 构建高可用数据采集服务
  • C++ 命令行参数解析实现与源码演示
  • Git 工作树:多分支并行开发管理技巧
  • JavaScript 宏任务与微任务详解

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online