对称加密算法、非对称加密算法和哈希算法
Laiyong Wang Lv6

一、对称加密算法(Symmetric Encryption)

1. 分类 & 代表性算法

分类 代表算法 简介
分组加密 DES3DESAESSM4 每次加密固定长度的数据块,如128位
流加密 RC4ZUC 一位一位或字节流加密,适合实时通信

2. 密码模式(Block Cipher Modes)

用于分组加密算法,决定如何处理多个数据块:

模式 全称 特点与适用场景
ECB Electronic Codebook 每块独立加密,易被模式分析攻击,不安全
CBC Cipher Block Chaining 每块依赖前一块,增加随机性,适合大数据加密
CFB Cipher Feedback 类似流加密,适合实时传输
OFB Output Feedback 错误不传播,适合串行加密
CTR Counter Mode 并行加密,提高效率,适合多核系统
GCM Galois/Counter Mode 支持认证和加密,适合网络协议,如TLS

3. 应用场景

  • 文件加密(如AES-CBC)
  • VPN 加密(如AES-GCM)
  • 数据库存储加密(如SM4)
  • HTTPS 会话数据加密(与非对称算法配合)

4. 优缺点

优点 缺点
加密解密速度快,适合大数据量传输 密钥必须安全分发,容易泄露即被破解
算法成熟,硬件支持丰富 无法实现数字签名,不能确保身份和完整性

二、非对称加密算法(Asymmetric Encryption / Public-Key Encryption)

1. 分类 & 代表性算法

类别 代表算法 简介
基于大数分解 RSA 最经典的非对称算法,支持加密和签名
基于离散对数问题 DSAElGamal 用于数字签名,ElGamal 可用于加密
基于椭圆曲线 ECC(如ECDSA, ECDH) 提供更高强度,密钥更短,适合移动设备
国密算法 SM2 国密非对称加密算法,基于ECC

2. 应用场景

  • 数字签名(如SSL证书签名)
  • 密钥交换(如HTTPS的握手阶段)
  • 区块链签名(如比特币用ECDSA)
  • 身份认证、电子合同、电子邮件加密

3. 优缺点

优点 缺点
不需要共享密钥,安全性高 运算复杂,效率低,不适合大数据量加密
可用于签名,确保身份认证和完整性 算法设计复杂,容易因参数选择错误而不安全
可用于构建PKI(公钥基础设施)体系 密钥长度较长,传输和存储成本高

三、哈希算法(Hash Functions)

1. 分类 & 代表性算法

类型 代表算法 简介
常规哈希 MD5SHA-1SHA-256/512SM3 生成固定长度的摘要,用于校验、签名等
密钥哈希 HMAC-MD5HMAC-SHA256 加盐(带密钥)哈希,用于认证
特殊哈希 bcryptscryptArgon2 专为密码保护设计,抗暴力破解

2. 应用场景

  • 数据完整性校验(如Git、文件下载校验)
  • 数字签名(如SSL证书中的签名)
  • 密码保护(如系统登录密码存储)
  • 区块链(如比特币区块结构)

3. 优缺点

优点 缺点
一致性强,相同输入一定生成相同输出 一旦被破解(如MD5、SHA-1),将不再安全
摘要固定长度,节省存储 无法还原原文,只用于验证和比对
算法计算快,适合大规模数据校验 对碰撞攻击较敏感,需选用安全算法(如SHA-256、SM3)

四、三者综合对比

特性 对称加密 非对称加密 哈希算法
加解密双方 相同密钥 公钥加密,私钥解密 仅单向处理,无解密
用途 数据保密 签名、身份认证、密钥交换 数据校验、签名辅助
性能 非常快
安全性 依赖密钥安全 更安全,适合开放场景 摘要碰撞要避免
是否可逆 否(单向)

五、常见组合应用场景举例

  • HTTPS / TLS:使用非对称加密(RSA/ECDHE)交换对称密钥(AES),传输数据用AES加密,消息摘要用哈希(SHA-256)进行签名验证。
  • 区块链:用ECC签名交易,用SHA256进行数据摘要与区块链接。
  • 文件签名:文件内容生成哈希 → 用私钥签名该哈希 → 公钥验证签名是否一致。

如你有某个算法或场景想深入探讨(如TLS、区块链、国密SM系列),我也可以继续展开。

$li-margin-bottom = 0.8rem $post-tool-button-width = 2.5rem .post-tools-container { padding-top var(--component-gap) .post-tools-list { li { margin-bottom $li-margin-bottom &:last-child { margin-bottom 0 } } li.tools-item { position relative box-sizing border-box width $post-tool-button-width height $post-tool-button-width color var(--text-color-3) font-size 1.2rem background var(--background-color-1) border-radius 50% box-shadow 2px 2px 5px var(--shadow-color) cursor pointer &:hover { box-shadow 2px 2px 8px var(--shadow-hover-color) } i { color var(--text-color-3) } &:hover { color var(--background-color-1) background var(--primary-color) i { color var(--background-color-1) !important } } &.toggle-show-toc { display none } &.go-to-comments { .post-comments-count { position absolute top 0 right -1rem display none align-items center justify-content center box-sizing border-box min-width 1.1rem height 1.1rem padding 0 0.2rem color var(--badge-color) font-size 12px background var(--badge-background-color) border-radius 0.4rem +keep-tablet() { display none !important } } } } li.status-item { width $post-tool-button-width height $post-tool-button-width color var(--text-color-3) font-size 1.6rem cursor pointer &.post-lock { cursor default .fa-lock-open { display none color var(--keep-success-color) } &.decrypt { cursor pointer .fa-lock-open { display block } .fa-lock { display none } } } } } }