跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaScriptNode.js大前端算法

Web 开发中五种常用加密算法实战及原理详解

Web 开发中数据安全至关重要。 AES、RSA、SHA-256、HMAC 及 PBKDF2 五种核心加密算法的原理、应用场景与 Node.js 实现代码。涵盖对称与非对称加密、哈希认证及密钥派生技术,提供对比表与安全最佳实践指南,帮助开发者构建安全的 Web 应用环境。

1951018925发布于 2026/4/10更新于 2026/5/2112 浏览
Web 开发中五种常用加密算法实战及原理详解

五种常用 Web 加密算法实战及原理详解

在现代 Web 开发中,数据安全至关重要。以下是五种最常用的 Web 加密算法,包括它们的原理、应用场景和实战代码示例。

1. AES (高级加密标准)

原理详解

AES 是一种对称加密算法,使用相同的密钥进行加密和解密。它采用替代 - 置换网络 (SPN) 结构,主要步骤包括:

  1. 密钥扩展:从初始密钥派生多轮密钥
  2. 初始轮:AddRoundKey(轮密钥加)
  3. 主轮(重复 9-13 次):
    • SubBytes(字节替换)
    • ShiftRows(行移位)
    • MixColumns(列混淆)
    • AddRoundKey
  4. 最终轮(省略 MixColumns)

AES 有三种密钥长度:128 位、192 位和 256 位,分别对应 10、12 和 14 轮加密。

应用场景
  • HTTPS 传输中的数据加密
  • 数据库敏感字段加密
  • 文件加密存储
实战代码(Node.js)
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.update(encryptedBuffer);
    decrypted = Buffer.concat([decrypted, decipher.final()]);
    return decrypted.toString();
}

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

AES 加密流程示意图

2. RSA (非对称加密)

原理详解

RSA 基于大整数因数分解的困难性,主要步骤:

  1. 密钥生成:
    • 选择两个大素数 p 和 q
    • 计算 n = pq,φ(n) = (p-1)(q-1)
    • 选择 e 使得 1 < e < φ(n) 且 gcd(e, φ(n)) = 1
    • 计算 d ≡ e⁻¹ mod φ(n)
    • 公钥=(e, n),私钥=(d, n)
  2. 加密:c ≡ mᵉ mod n
  3. 解密:m ≡ cᵈ mod n
应用场景
  • SSL/TLS 握手过程中的密钥交换
  • 数字签名
  • 小数据量加密(如加密对称密钥)
实战代码(Node.js)
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);

RSA 密钥交换示意图

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

原理详解

SHA-256 是 SHA-2 家族的一员,产生 256 位哈希值。其工作流程:

  1. 预处理:
    • 填充消息使其长度为 512 位的倍数
    • 附加原始消息长度
  2. 哈希计算:
    • 将消息分成 512 位块
    • 对每个块应用 64 轮压缩函数
    • 使用 8 个初始哈希值和 64 个预定义常数
    • 每轮包括消息调度、工作变量更新等操作
  3. 输出:最终 8 个工作变量连接形成 256 位哈希
应用场景
  • 密码存储
  • 数据完整性验证
  • 区块链和加密货币
  • 数字签名
实战代码(浏览器环境)
// 浏览器中使用 Web Crypto API 进行 SHA-256 哈希
async function sha256Hash(message) {
    // 将字符串编码为 Uint8Array
    const encoder = new TextEncoder();
    const data = encoder.encode(message);
    
    // 计算哈希
    const hashBuffer = await crypto.subtle.digest('SHA-256', data);
    
    // 将 ArrayBuffer 转换为十六进制字符串
    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));

SHA-256 哈希过程示意图

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

原理详解

HMAC 结合加密哈希函数和密钥,提供消息认证。公式为:

HMAC(K, m) = H((K ⊕ opad) || H((K ⊕ ipad) || m))

其中:

  • H 是哈希函数(如 SHA-256)
  • K 是密钥
  • m 是消息
  • opad 是外部填充(0x5c 重复)
  • ipad 是内部填充(0x36 重复)
应用场景
  • API 请求认证
  • JWT 签名
  • 消息完整性验证
实战代码(Node.js)
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');

HMAC 认证机制示意图

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

原理详解

PBKDF2 通过重复哈希增强弱密码的安全性:

  1. 输入密码、盐值、迭代次数和期望密钥长度
  2. 对密码和盐值应用 HMAC 多次(迭代)
  3. 每次迭代的输出与前一次结果异或
  4. 最终组合所有块生成派生密钥
应用场景
  • 用户密码存储
  • 从密码生成加密密钥
实战代码(Node.js)
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);

PBKDF2 密钥派生示意图

加密算法对比表

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

安全最佳实践

  1. 密钥管理:
    • 永远不要硬编码密钥
    • 使用密钥管理系统(如 AWS KMS、Hashicorp Vault)
    • 定期轮换密钥
  2. 算法选择:
    • 对称加密首选 AES-256
    • 非对称加密使用 RSA 2048 位或 ECC 256 位 +
    • 哈希函数使用 SHA-256 或 SHA-3
  3. 密码存储:
    • 永远不要明文存储密码
    • 使用 PBKDF2、bcrypt 或 Argon2
    • 每个用户使用唯一盐值
  4. 传输安全:
    • 始终使用 HTTPS
    • 敏感数据在客户端也应加密
  5. 错误处理:
    • 加密失败时不要暴露详细信息
    • 使用恒定时间比较防止时序攻击

进阶主题

  1. 椭圆曲线加密 (ECC):比 RSA 更高效的非对称加密
  2. bcrypt/Argon2:更现代的密码哈希算法
  3. 量子安全加密:抗量子计算的算法(如格密码)
  4. 同态加密:在加密数据上直接计算
  5. 零知识证明:验证信息而不泄露信息本身

通过掌握这五种核心加密算法及其实现,您已经具备了构建安全 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折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • Python 如何在运行时调用其他文件中的函数
  • Windows + WSL + Ubuntu 安装 OpenClaw 及飞书百炼集成指南
  • 基于 Claude Code 的 AI 内容创作工作流构建与实践
  • C++ 红黑树实现详解:规则、结构与核心操作
  • Python PySerial 串口通信库入门与实战
  • LangChain 核心模块详解与实战指南
  • IntelliJ IDEA 打包 Web 项目 WAR 包及 Tomcat 部署指南
  • C++11 新特性深度解析:可变参数模板与 Lambda 表达式
  • Spring AI 集成 Ollama 与 LLaVA 实现多模态大模型应用实战
  • AIGC 产品经理面试高频问题与核心解答
  • FPGA 入门:Vivado 与 Vitis 2023.1 安装指南
  • LangChain 基本概念与链式应用解析
  • PostgreSQL 高可用集群部署指南
  • ComfyUI:AI 绘画与图像生成的高效工作流
  • 基于 cpolar 内网穿透远程访问 Open-Lovable 网页克隆工具
  • 数据团队建设:核心角色与技能要求
  • LeetCode Hot 100:ACM 模式输入输出处理指南
  • GitHub Copilot 核心特性与高级配置指南
  • OpenAI DALL·E API 调用与 AI 绘画应用开发实战
  • Axure 制作 AI 自动对话机器人原型

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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