一次加密的完整过程
加密过程中涉及哪些内容

一个完整的加密过程主要涉及以下两大部分内容:
- 数据部分:主要包括待加密的明文和用于加解密操作的密钥。
- 算法部分:包括将数据转换为特定格式的编码、使数据长度符合要求的填充算法、处理长数据分块的工作模式以及核心的加密算法本身。
通过上图可以直观理解,除了原始的明文信息,密钥、填充算法、工作模式或加密算法中任意一环的差异,都将导致最终的密文无法被正确解密。
加密的三个重要组成部分
填充算法
标准的加密算法通常要求处理固定长度的数据块,而实际应用中的明文长度是任意的。因此,在加密之前,需要先通过填充算法向明文末尾添加一些特定格式的数据,使其总长度达到算法所需块大小的整数倍。这一步骤不仅能适配算法,还能混淆原始数据,起到一定的“加盐”效果,抵御如时序攻击等特定破解手段。
PKCS1Padding——RSA常用填充算法
在RSA加密中,当使用1024位(128字节)的密钥时,一个数据块的结构是固定的。其中可用于存储明文的最大长度为117字节。其结构定义如下:
数据块(128字节) = 0x00(固定) + BT(1字节) + PS(最少8字节) + 0x00(固定) + (明文)
BT:在私钥加密时取0x01,公钥加密时取0x02。
PS:填充字节。在私钥加密时填充0xFF,公钥加密时填充随机值,以确保安全性。
举例:
用1024位的公钥加密字符串“abc”,其填充后的数据块构成为:0x00 + 0x02 + 114个随机字节 + 0x00 + “abc”,总长度恰好为128字节。
PKCS7Padding——AES常用填充算法
PKCS7Padding的规则是:如果需要填充n(n > 0)个字节才能使数据对齐到块长度,那么就填充n个字节,且每个字节的值都是n。如果数据长度恰好已经是块长度的整数倍,则额外填充一个完整的块(块长度个字节),每个字节的值均为块长度。
举例:
假设块长度为8字节。
- 数据长度为9字节(十六进制:
FF FF FF FF FF FF FF FF FF)。
- 需要填充的字节数为:
2*8 - 9 = 7。
- 填充7个值为
0x07的字节。
- PKCS7填充后的数据为:
FF FF FF FF FF FF FF FF FF 07 07 07 07 07 07 07
PKCS5Padding——DES常用填充算法
PKCS5Padding是PKCS7Padding的一个子集,其块大小固定为8字节。值得注意的是,在JAVA中,虽然AES算法常写作AES/ECB/PKCS5Padding,但其底层实际实现的是支持任意块大小的PKCS7Padding。
工作模式
块加密算法一次只能处理一个固定长度的数据块。为了加密任意长度的消息,需要将明文分割成多个块,工作模式就是定义如何将加密算法反复应用于这一系列明文块上的规则。一个优秀的工作模式不仅能处理长数据,还能隐蔽明文的统计特征,增强整体安全性。
以下是两种基础且常见的工作模式:
ECB (电子密码本模式)
ECB是最简单直观的工作模式。加密前,明文被划分为若干个独立的数据块,每个块使用完全相同的密钥进行加密,解密过程亦然。
- 优点:由于各块加解密相互独立,因此可以并行计算,效率高。
- 缺点:相同的明文块会被加密成完全相同的密文块。这无法隐藏数据模式,安全性较弱,不推荐用于加密有意义的数据。


CBC (密码分组链接模式)
在CBC模式中,每个明文块在加密之前,会先与前一个密文块进行异或(XOR)操作,第一个块则与一个随机生成的初始化向量(IV)进行异或。
- 优点:由于每个密文块都依赖于之前所有的明文块,因此即使明文相同,只要IV不同,产生的密文就完全不同。它能有效隐藏数据模式。
- 缺点:加密过程是串行的,无法并行化。解密过程则可以并行。


加密算法
加密算法根据密钥的使用方式,主要分为对称加密和非对称加密两大类。
- 对称加密:加密和解密使用相同的密钥。加解密速度快,适合处理大量数据。
- 非对称加密:加密和解密使用一对不同的密钥,即公钥和私钥。公钥公开,私钥保密。常用于密钥交换和数字签名。
- 补充说明:有时人们也将无需密钥的散列算法(如MD5、SHA系列)泛称为加密算法,但其严格意义上属于摘要算法,不可逆。
DES算法(对称加密)
DES是一种经典的分组对称加密算法。
- 以64位为一个分组进行加解密。
- 密钥长度为56位(另有8位校验位),算法公开。
- 安全性依赖于密钥的保密。以当前的计算能力,56位密钥可通过暴力穷举破解,因此已不再安全。
3DES算法(对称加密)
3DES是DES的增强版,通过对同一数据块应用三次DES加密来提高安全性。
- 通常使用三个密钥(K1, K2, K3),执行“加密(K1)-解密(K2)-加密(K3)”的过程。
- 有时也会使用16字节密钥,其内部机制是将前8字节复制到后8字节,形成24字节的有效密钥。
- Java等环境通常只支持24字节密钥。
AES算法(对称加密)
AES是目前最主流、最推荐的对称加密标准,旨在取代DES。
- 支持128、192、256位三种密钥长度,分组长度固定为128位。
- 在设计上兼具安全性、效率和灵活性,被美国政府采纳为标准,并广泛应用于全球。
RSA算法(非对称加密)
RSA是应用最广泛的非对称加密算法之一。
- 其安全性基于“大数质因数分解”的数学难题:将两个大质数相乘很容易,但想从其乘积分解回原来的质数却极其困难。
- 公钥用于加密或验证签名,私钥用于解密或生成签名。
- 被ISO推荐为公钥加密标准。
ECC算法(非对称加密)
ECC是基于椭圆曲线数学的非对称加密算法。
- 与RSA相比,在相同安全强度下,ECC所需的密钥长度更短(例如256位ECC相当于3072位RSA的安全水平)。
- 具有计算量小、处理速度快、存储空间占用少、带宽要求低等优势。
- 尽管优势明显,但目前RSA因其历史久远、应用生态成熟,仍是主流选择之一,不过ECC的普及率正在快速增长。
加密相关的一些扩展说明
什么是数字摘要?
数字摘要,也称为哈希值,是通过散列函数(如MD5、SHA-256)对原始数据计算得到的一段固定长度的字符串。
- 其核心作用是验证数据的完整性和唯一性(理想情况下)。只要原始数据发生哪怕一位的改变,其摘要值就会发生剧烈变化。
- 重要区别:摘要是单向的、不可逆的。它不是加密后的密文,不能通过摘要还原出原始数据。
什么是数字签名?
数字签名结合了非对称加密和数字摘要技术,用于验证信息的来源和完整性,过程类似于物理世界中的手写签名。
- 发送方对原始数据生成数字摘要。
- 发送方使用自己的私钥对这个摘要进行加密,加密后的结果就是数字签名。
- 发送方将原始数据和数字签名一起发送给接收方。
- 接收方使用发送方的公钥解密数字签名,得到摘要A;同时,接收方自己对收到的原始数据用同样的哈希算法生成摘要B。
- 对比摘要A和摘要B。如果两者一致,则证明数据在传输过程中未被篡改,且确实来自声称的发送方。
什么是数字证书?
数字证书是一个由权威的证书颁发机构数字签名的电子文件。
- 它包含了证书持有者的身份信息(如域名、组织名称)及其公钥。
- CA机构使用自己的私钥对整个证书内容进行签名,保证了证书本身的可信度和完整性。
- 在网络通信中(如HTTPS),数字证书就像网络实体的“数字身份证”,用于验证服务器或客户端的真实身份,是建立信任链的基石。关于网络身份验证的更多实践,可以参考网络安全与身份认证相关的技术专题。
什么是CA?
CA是证书授权中心的简称,是一个受公众信任的第三方机构。
- 它的核心职能是审核证书申请者的真实身份,并为其签发和管理数字证书。
- 当网站部署HTTPS时,运营者需要向CA机构提交证明材料,经过人工或自动化审核并支付费用后,才能获得由该CA签名的SSL/TLS证书。
- 操作系统和浏览器内置了受信的根CA证书列表,从而建立起整个互联网的信任体系。理解CA是理解现代公钥基础设施安全模型的关键。

综上所述,从底层的填充算法、工作模式到核心的对称/非对称加密算法,再到构建信任体系的数字签名、数字证书和CA机构,共同构成了一个层次化、协作化的完整网络安全解决方案,确保了数据在传输和存储过程中的机密性、完整性与真实性。