跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python

五种常用的web加密算法

文章目录 五种常用Web加密算法实战及原理详解 1\. AES (高级加密标准) 原理详解 应用场景 实战代码(Node.js) 2\. RSA (非对称加密) 原理详解 应用场景 实战代码(Node.js) 3\. SHA-256 (安全哈希算法) 原理详解 应用场景 实战代码(浏览器环境) 4\. HMAC (基于哈希的消息认证码) 原理详解 应用场景 实战代码(Node.js) 5\. PB…

不羁发布于 2026/4/6更新于 2026/9/83.1K 浏览
五种常用的web加密算法
文章目录
  • 五种常用Web加密算法实战及原理详解
    • 1. AES (高级加密标准)
      • 原理详解
      • 应用场景
      • 实战代码(Node.js)
    • 2. RSA (非对称加密)
      • 原理详解
      • 应用场景
      • 实战代码(Node.js)
    • 3. SHA-256 (安全哈希算法)
      • 原理详解
      • 应用场景
      • 实战代码(浏览器环境)
    • 4. HMAC (基于哈希的消息认证码)
      • 原理详解
      • 应用场景
      • 实战代码(Node.js)
    • 5. PBKDF2 (基于密码的密钥派生函数)
      • 原理详解
      • 应用场景
      • 实战代码(Node.js)
    • 加密算法对比表
    • 安全最佳实践
    • 进阶主题

在这里插入图片描述

五种常用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加密functionencrypt(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解密functiondecrypt(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);

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加密functionrsaEncrypt(data, publicKey){return crypto.publicEncrypt({ key: publicKey, padding: crypto.constants.RSA_PKCS1_OAEP_PADDING, oaepHash:'sha256'}, Buffer.from(data)).toString('base64');}// RSA解密functionrsaDecrypt(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位哈希值。其工作流程:

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

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');// 生成HMACfunctiongenerateHMAC(message, secret){return crypto.createHmac('sha256', secret).update(message).digest('hex');}// 验证HMACfunctionverifyHMAC(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通过重复哈希增强弱密码的安全性:

  1. 输入密码、盐值、迭代次数和期望密钥长度
  2. 对密码和盐值应用HMAC多次(迭代)
  3. 每次迭代的输出与前一次结果异或
  4. 最终组合所有块生成派生密钥
应用场景
  • 用户密码存储
  • 从密码生成加密密钥
实战代码(Node.js)
const crypto =require('crypto');// 使用PBKDF2派生密钥functionderiveKey(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);// 验证密码示例functionverifyPassword(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. 密钥管理:
    • 永远不要硬编码密钥
    • 使用密钥管理系统(如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. 文章目录
  2. 五种常用Web加密算法实战及原理详解
  3. 1\. AES (高级加密标准)
  4. 原理详解
  5. 应用场景
  6. 实战代码(Node.js)
  7. 2\. RSA (非对称加密)
  8. 原理详解
  9. 应用场景
  10. 实战代码(Node.js)
  11. 3\. SHA-256 (安全哈希算法)
  12. 原理详解
  13. 应用场景
  14. 实战代码(浏览器环境)
  15. 4\. HMAC (基于哈希的消息认证码)
  16. 原理详解
  17. 应用场景
  18. 实战代码(Node.js)
  19. 5\. PBKDF2 (基于密码的密钥派生函数)
  20. 原理详解
  21. 应用场景
  22. 实战代码(Node.js)
  23. 加密算法对比表
  24. 安全最佳实践
  25. 进阶主题

更多推荐文章

查看全部
  • GitHub Copilot 接入 Figma MCP 还原设计稿生成前端代码
  • Web-Check 与 cpolar 实现异地远程访问网站检测工具
  • 基于 OpenClaw 框架搭建自动化 AI 选股系统
  • Helm Monitor 插件:基于监控数据自动回滚 Release
  • FPGA 模块助力现代工厂高速数据采集与实时处理
  • ComfyUI 详解:基于节点式工作流的 AI 绘画工具指南
  • 大模型学习路线:从新手到专家的完整路径
  • 2026 年各大高校 AIGC 检测政策汇总
  • AIri 虚拟角色全平台部署指南(Web/桌面/移动)
  • AI 绘画提示词引导系数设置指南:从原理到实践
  • 基于 MCP 协议的图片素描风格转换工具使用指南
  • AI 如何助力前端 Debug 及实际应用指南
  • 基于 RoBERTa 模型的评论文本分类实战
  • Kubernetes Ingress Webhook 验证机制:原理与故障排查
  • 网络安全行业发展现状与人才需求分析
  • TRAE AI 智能体实现 Vue 3 + Node.js + MySQL 全栈项目实战
  • WebLogic 集群通信机制:多播与单播协议解析
  • AI 前沿技术日更简报:2026-03-04
  • 基于Python+OpenCV实现自动扫雷
  • 基于 Coze 构建专属 AI 应用:从智能体开发到 Web 部署实战

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online