news 2026/5/7 3:26:51

HTTPS、SSH登录、数字签名… 一文搞懂RSA、AES这些加密算法到底用在哪了

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HTTPS、SSH登录、数字签名… 一文搞懂RSA、AES这些加密算法到底用在哪了

HTTPS、SSH与数字签名:加密算法在真实场景中的角色解析

当你在浏览器地址栏输入"https://"开头的网址时,整个页面加载过程背后其实隐藏着一场精密的加密芭蕾。这场表演的主角们——RSA、AES、SHA-256等加密算法各司其职,共同构筑起现代互联网的安全基石。本文将带你穿透技术术语的迷雾,从实际应用场景出发,揭示这些算法如何在日常开发运维中发挥作用。

1. HTTPS安全通信背后的加密协作

每次通过HTTPS访问网站时,浏览器与服务器之间会进行一场精心设计的"TLS握手舞会"。这场舞会的第一步是身份验证:服务器会出示它的"身份证"——数字证书,证明"我就是你要访问的网站,不是钓鱼网站"。这个环节的核心就是非对称加密算法(通常是RSA或ECC)。

以RSA 2048为例,握手过程大致如下:

  1. 服务器将包含公钥的证书发送给浏览器
  2. 浏览器验证证书有效性(是否过期、是否由可信CA签发等)
  3. 生成一个随机的会话密钥(通常是对称加密密钥)
  4. 用服务器的公钥加密这个会话密钥并发送给服务器
  5. 服务器用私钥解密获取会话密钥
# 生成RSA私钥的OpenSSL命令示例 openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048

注意:现代TLS 1.3已经优化了这一过程,前向安全性成为标配,但基本原理仍然适用

身份验证完成后,真正的数据传输才开始。这时主角换成了对称加密算法(如AES-256-GCM),因为对称加密在性能上比非对称加密快数百倍。有趣的是,虽然握手阶段使用了较重的非对称加密,但实际数据传输却依赖轻量级的对称加密,这种分工体现了两种加密技术的优势互补。

2. SSH密钥登录的加密机制剖析

当你使用ssh user@server命令连接远程服务器时,SSH协议同样上演着一场加密大戏。现代SSH默认采用更先进的Ed25519算法,但理解传统的RSA密钥对仍然很有必要。

SSH密钥登录的核心流程:

  1. 客户端生成RSA密钥对:ssh-keygen -t rsa -b 4096
  2. 将公钥(id_rsa.pub)上传到服务器的~/.ssh/authorized_keys
  3. 登录时,服务器用存储的公钥加密一个随机挑战(challenge)
  4. 客户端用私钥解密挑战并返回结果
  5. 服务器验证结果匹配后建立连接
# 查看SSH密钥指纹的命令 ssh-keygen -lf ~/.ssh/id_rsa.pub

这种机制的精妙之处在于:即使有人截获了通信数据,没有私钥也无法解密挑战;而服务器也不需要存储任何敏感信息(私钥始终只在客户端保存),大大降低了密钥泄露风险。

3. JWT Token中的签名与验证

现代Web应用广泛使用JSON Web Token(JWT)作为身份验证令牌。一个典型的JWT由三部分组成:

header.payload.signature

其中signature部分的生成就依赖于哈希算法和(可选)非对称加密。以HS256(HMAC+SHA256)为例:

  1. 将header和payload用Base64Url编码
  2. 用密钥对编码后的字符串计算HMAC-SHA256
  3. 将结果也进行Base64Url编码作为签名
// JWT签名验证的伪代码示例 function verifyJWT(token, secret) { const [header, payload, signature] = token.split('.'); const computedSig = HMAC_SHA256(header + '.' + payload, secret); return computedSig === base64UrlDecode(signature); }

当使用RS256(RSA+SHA256)时,验证过程变为用公钥验证签名,这样任何人都可以验证Token的真实性,但只有持有私钥的服务端才能签发新Token。

4. 密码存储的最佳实践:加盐哈希

用户密码的安全存储是系统安全的第一道防线。即使使用SHA-256这样的强哈希算法,单纯的哈希仍然不够安全——彩虹表攻击可以快速破解常见密码的哈希值。这就是为什么需要"加盐":

存储方案安全性实现复杂度
明文存储极低
简单哈希
加盐哈希
自适应哈希(如bcrypt)较高

现代系统推荐使用bcrypt这类专门为密码设计的算法:

# Python bcrypt使用示例 import bcrypt # 生成加盐哈希 password = b"user_password_123" salt = bcrypt.gensalt(rounds=12) # 计算成本因子 hashed = bcrypt.hashpw(password, salt) # 验证密码 if bcrypt.checkpw(password, hashed): print("密码正确")

bcrypt的精妙之处在于:

  • 自动生成随机盐值,无需额外存储
  • 可调节的计算成本(rounds参数),对抗硬件破解
  • 内置的哈希比较能抵抗时序攻击

5. 加密算法的性能与安全权衡

在实际工程中,选择加密算法从来不是简单的"哪个最安全用哪个",而需要综合考虑多种因素:

对称加密(AES) vs 非对称加密(RSA)对比

特性AES-256RSA-2048
密钥长度256位2048位
加密速度~600MB/s~0.5MB/s
解密速度~600MB/s~15MB/s
典型用途大数据量加密密钥交换/数字签名

这个对比清晰地展示了为什么HTTPS要在握手后用AES传输数据——如果用RSA加密所有网页内容,网络延迟将变得难以忍受。

另一个关键考量是前向安全性。即使攻击者记录了加密通信并事后获取了服务器私钥,前向安全的密钥交换方式也能保证历史通信不被解密。这就是为什么现代TLS优先使用ECDHE密钥交换而非静态RSA密钥交换。

6. 现代加密的演进趋势

加密算法的发展从未停止,几个值得关注的趋势:

  1. 后量子密码学:能够抵抗量子计算机攻击的新算法,如CRYSTALS-Kyber(密钥封装)和CRYSTALS-Dilithium(数字签名)

  2. 硬件加速:Intel AES-NI指令集可以将AES性能提升10倍,类似技术也出现在ARM芯片中

  3. 算法简化:Ed25519相比传统RSA签名,密钥更短(256vs2048位)、性能更高且实现更简单

// 使用libsodium进行Ed25519签名的C示例 #include <sodium.h> unsigned char public_key[crypto_sign_PUBLICKEYBYTES]; unsigned char secret_key[crypto_sign_SECRETKEYBYTES]; crypto_sign_keypair(public_key, secret_key); unsigned char signed_message[50 + crypto_sign_BYTES]; unsigned long long signed_message_len; crypto_sign(signed_message, &signed_message_len, "Hello World", 11, secret_key);

在实际项目中,我发现很多团队容易犯的一个错误是过度依赖加密算法本身,而忽视了密钥管理的重要性。再强的算法,如果私钥保管不当(比如硬编码在源码中),安全防线也会瞬间崩塌。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 3:26:20

CodeFire:本地开发工作流自动化工具,提升多项目管理效率

1. 项目概述&#xff1a;一个为开发者打造的“代码管家”如果你和我一样&#xff0c;是个经常泡在代码里的开发者&#xff0c;肯定遇到过这样的场景&#xff1a;手头同时开着好几个项目&#xff0c;每个项目都有自己的依赖、环境变量、启动脚本和数据库配置。每次切换项目&…

作者头像 李华
网站建设 2026/5/7 3:18:27

Go语言高性能Web服务器Kraken:架构解析与工程实践

1. 项目概述&#xff1a;一个轻量级、高性能的Web应用服务器 最近在折腾一个需要处理大量并发连接的后端服务&#xff0c;对性能要求比较高&#xff0c;但又不想引入像Nginx那样功能繁多、配置复杂的“重型武器”。在社区里翻找解决方案时&#xff0c;一个名为 Kraken 的项目…

作者头像 李华
网站建设 2026/5/7 3:12:49

Python量化投资实战:可转债分析工具kzz-helper核心架构与策略实现

1. 项目概述与核心价值最近在逛GitHub的时候&#xff0c;发现了一个挺有意思的项目&#xff0c;叫AdamTao91/kzz-helper。光看名字&#xff0c;很多朋友可能一头雾水&#xff0c;这“kzz”到底是个啥&#xff1f;其实&#xff0c;这是“可转债”的拼音缩写。没错&#xff0c;这…

作者头像 李华
网站建设 2026/5/7 3:07:46

repo2txt:浏览器本地运行的代码仓库转文本工具,专为LLM上下文优化

1. 项目概述与核心价值如果你正在尝试让大型语言模型&#xff08;LLM&#xff09;帮你分析、理解或修改一个代码仓库&#xff0c;那么你很可能已经遇到了一个最基础也最棘手的问题&#xff1a;如何把整个项目&#xff0c;包括它的目录结构、成百上千个文件&#xff0c;以一种清…

作者头像 李华
网站建设 2026/5/7 3:06:44

x-algorithm:模块化高性能算法库的设计原理与工程实践

1. 项目概述&#xff1a;算法探索的新前沿最近在算法社区里&#xff0c;一个名为NextFrontierBuilds/x-algorithm的项目引起了我的注意。这个标题本身就充满了想象空间——“下一个前沿构建”与“X算法”的组合&#xff0c;暗示着它并非一个解决特定、狭窄问题的工具&#xff0…

作者头像 李华
网站建设 2026/5/7 3:06:31

网络求职骗局持续增多,Z世代深受其害

当前就业市场正面临多重困境&#xff1a;职位空缺稀少、竞争激烈、AI自动化冲击以及全球经济形势恶化&#xff0c;诸多因素叠加之下&#xff0c;这片求职领域已然险象环生——那些看似前景光明的职位&#xff0c;很可能只是精心设计的骗局。LinkedIn信任产品副总裁奥斯卡罗德里…

作者头像 李华