五种常用的web加密算法

五种常用的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加密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应用的基础能力。在实际项目中,应根据具体需求选择合适的算法组合,并遵循安全最佳实践来保护用户数据。

Read more

2026年高校AIGC检测新规解读:AI率多少算合格?

2026年高校AIGC检测新规解读:AI率多少算合格?

2026年高校AIGC检测新规解读:AI率多少算合格? 从2024年知网正式上线AIGC检测功能开始,短短两年时间,"AI率"已经从一个新鲜名词变成了每个毕业生必须面对的硬性指标。2026年,各高校的AIGC检测政策进一步收紧和细化,要求也越来越明确。 那么,2026年AI率到底多少才算合格?不同学校的标准差别大吗?不合格会面临什么后果?本文将对这些问题进行深入解读。 一、AIGC检测已成为毕业论文审查的标配 回顾AIGC检测在高校中的普及历程,可以用"指数级扩散"来形容: * 2024年:知网上线AIGC检测功能,少数985/211院校开始试点,大部分学校处于观望状态 * 2025年:超过60%的本科院校和80%的研究生培养单位将AIGC检测纳入论文审查流程 * 2026年:AIGC检测基本实现全覆盖,包括专科院校在内的绝大部分高等教育机构都已建立相关制度 这一进程的背后,是教育部在2025年初发布的《关于加强高等学校学位论文学术诚信管理的指导意见》,其中明确提到"鼓励各高校引入人工智能生成内容检测机制,将AIGC检测作为论文质量保障的重要环节"。 虽然教育部没

【PX4+QGroundControl+MAVROS+Gazebo】PX4控制在Gazebo中控制自己的无人机

目录 前言 一、PX4、MAVROS、QGroundControl之间的关系 1.1 Gazebo与PX4通信 1.2 PX4与QGroundControl通信 1.3 总结 二、实现过程【以阿木实验室P230为例】 2.1 仿真环境 2.2 模型建立 2.3 建立gazebo和MAVROS之间的连接 2.4 建立MAVROS和PX4之间的连接 2.5 验证实验结果 三、一个失败的地方 总结 前言 笔者在准备用阿木实验室-P230无人机仿真的时候,发现官方给的该无人机仿真的代码依赖于该公司的Prometheus、Prometheus-PX4以及QGroundControl软件。但是笔者日后想把自己的项目上传到Github上,如果把整个阿木实验室的PX4上传上去显得不现实,且也占很大存储。因此,笔者会从小白的角度【因为笔者也是Green Bird】,介绍将自己的无人机连接PX4的办法。以下内容仅供参考,若有误,

宇树VR遥操与IL——从遥操程序xr_teleoperate到unitree_IL_lerobot:如何基于G1进行manipulation开发

宇树VR遥操与IL——从遥操程序xr_teleoperate到unitree_IL_lerobot:如何基于G1进行manipulation开发

前言 如之前的文章所述,我司「七月在线」正在并行开发多个订单,目前正在全力做好每一个订单,因为保密协议的原因,暂时没法拿出太多细节出来分享 但可以持续解读我们所创新改造或二次开发的对象,即解读paper和开源库「当然 有些paper/库还没开始用,但也可以提前解读,作为关注了解」 而对于我司人形开发的订单,截止到25年4月,背后的机器人多半基于这几家:宇树、智元、傅利叶、乐聚「之所以用的这几家,一半因为我和这些公司熟,一半因为客户已有其中某一家或某几家的本体 需在其基础上做定制开发,如其它厂商看到 有兴趣合作,欢迎私我,比如星动纪元、星海图、众擎等等」 * 通过此文《Fourier-Lerobot——把斯坦福人形动作策略iDP3封装进了Lerobot(含我司七月的idp3落地实践)》可知,傅利叶 把idp3 装进了lerobot * 类似的,宇树 通过此开源库「unitree_IL_lerobot」,也把lerobot 集成了下 该库包含了π0策略 且无论咱们是用傅利叶集成的lerobot—

论文阅读 | MiniCPM-o | RLAIF-V开源AI反馈助力模型可信度超越GPT-4V

论文阅读 | MiniCPM-o | RLAIF-V开源AI反馈助力模型可信度超越GPT-4V

论文地址:https://arxiv.org/pdf/2405.17220 发布时间:2024年5月27日 =》2025 年 10 月 29 日 v3版本 论文主要由豆包AI翻译 论文总结 核心目标 解决现有多模态大语言模型的幻觉问题,突破传统RLHF依赖人工标注、现有RLAIF依赖专有模型的局限,通过全开源范式构建高质量反馈,实现模型可信度与人类偏好的对齐。 核心创新 1. 去混淆响应生成:相同条件下多轮采样解码,消除文本风格干扰,凸显可信度真实差异; 2. 分而治之反馈标注:将响应拆解为原子声明,转换为极性问题评估,降低开源模型标注难度; 3. 迭代反馈学习:动态更新反馈分布,解决DPO训练中的分布偏移问题; 4. 推理自反馈机制:利用DPO对齐模型的奖励分数,结合长度归一化策略,优化推理阶段性能。 关键结果 1. 幻觉抑制显著:RLAIF-V 7B将物体幻觉率降低80.7%