1. 概述

在本篇教程中,我们将深入探讨两种常见的加密方式:流加密(Stream Cipher)与分组加密(Block Cipher)。这两种加密方式在加密原理、性能特点以及应用场景上存在显著差异。

我们会分别介绍它们的工作机制,并通过示例说明其加密过程,最后总结它们之间的核心区别。

2. 加密算法简介

加密技术是保障通信安全的重要手段。加密过程通常从一段明文开始,通过加密算法将其转换为密文;而接收方则使用解密算法还原原始明文:

rgerge.drawio

加密和解密所使用的算法统称为加密算法(Cipher)。根据密钥的使用方式,加密算法可分为两大类:

  • 对称加密(Symmetric Cipher):加密与解密使用相同的密钥
  • 非对称加密(Asymmetric Cipher):加密与解密使用不同的密钥

对称加密因其速度快、适合处理大量数据而广泛用于数据传输,但其只能保障数据的机密性;而非对称加密虽然速度慢,但可以同时保障数据的机密性、身份认证和不可否认性。

对称加密又可细分为流加密和分组加密两种主要类型,我们接下来重点分析这两者。

3. 流加密(Stream Cipher)

流加密属于对称加密的一种,它通过一个密钥(Key)+ 随机数(Nonce)生成伪随机密钥流(Keystream),然后逐位对明文进行异或(XOR)操作以生成密文。

流加密的核心流程如下:

  1. 使用密钥和Nonce生成一个伪随机密钥流(Keystream)
  2. 逐位对明文和密钥流进行异或操作,生成密文

rgerge.drawio-3

流加密的工作方式是逐位(bit-by-bit)进行的,因此效率高,适合实时数据流加密,如网络通信。

✅ 特点:

  • 密钥长度通常为128或256位,Nonce长度为64~128位
  • 每次加密必须使用不同的密钥+Nonce组合,否则会导致密钥流重复,存在安全风险
  • 支持同步流加密(Synchronous)和自同步流加密(Self-synchronizing)

🔍 示例说明:

假设明文字符为 D,其ASCII码为 01000100,密钥流为 11001100,则加密过程如下:

明文: 01000100
密钥流:11001100
异或结果(密文):10001000

解密时只需再次对密文与密钥流异或即可还原明文。

📌 常见流加密算法:

  • ChaCha20
  • Salsa20
  • RC4(已被认为不安全)
  • A5/1(用于GSM通信)

4. 分组加密(Block Cipher)

分组加密同样是基于对称密钥的加密方式,但与流加密不同的是:它将明文划分为固定大小的块进行加密,每个块独立或与前一个块相关联进行处理。

常见的块大小为64位或128位。

rgerge.drawio-1.drawio

分组加密在加密过程中还会使用一个初始化向量(IV),与密钥一起用于生成第一个块的加密数据,从而防止重复加密结果。

✅ 操作模式(Mode of Operation):

分组加密有多种工作模式,常见如下:

  • ECB(Electronic Codebook):最简单,但最不安全。每个块独立加密,容易暴露数据模式
  • CBC(Cipher Block Chaining):每个块与前一个密文块异或后再加密,安全性更高,常用于传输层(如TLS)
  • CTR(Counter):将块加密转换为流加密,支持并行加密,效率高

🔍 示例说明:

假设一个块大小为128位,明文为:

明文块1:P1
明文块2:P2
...

加密过程为:

C1 = E(K, P1 XOR IV)
C2 = E(K, P2 XOR C1)
...

其中,E(K, ...) 表示使用密钥K进行加密。

📌 常见分组加密算法:

  • DES(已淘汰)
  • 3DES(Triple DES)
  • AES(Advanced Encryption Standard)
  • Blowfish(较少使用)

5. 核心区别总结

特性 流加密 分组加密
数据处理单位 每次处理一个字节(bit-by-bit) 每次处理一个块(如64或128位)
加密速度 相对慢
实现复杂度 简单 复杂
使用密钥长度 通常8位 通常64位以上
加密方法 替换(Substitution) 置换(Transposition)
数据冗余 不易出现 可能出现
实现代码量 较少 较多
密钥复用 每次必须不同(Key + Nonce) 同一密钥可多次使用
硬件实现 更适合 更适合软件实现
解密难度 相对容易 更难破解
典型实现 RC4、ChaCha20 DES、AES、3DES

6. 总结

流加密与分组加密各有优劣,适用于不同场景:

  • 流加密:适合需要快速加密大量数据流的场景,如实时通信、无线通信等
  • 分组加密:适合要求高安全性的场景,如金融数据、文件存储等

在实际开发中,选择合适的加密方式需综合考虑性能、安全性、实现复杂度等因素。AES 是目前最推荐的分组加密算法,而 ChaCha20 则是现代流加密中的首选。


小贴士:在使用流加密时务必避免重复使用相同的 Key + Nonce,否则会严重降低安全性。
踩坑提醒:不要使用 RC4,因其已被证明存在严重漏洞。
⚠️ 建议:对于需要高安全性的场景,优先考虑 AES-GCM 或 ChaCha20-Poly1305 这类 AEAD(认证加密)方案。


原始标题:Differences Between Stream Cipher and Block Cipher