我们来精确分析 AES-128(块大小16字节,PKCS#7 填充)加密后,不同文件大小增加的空间比例。
1️⃣ AES 填充规则
- AES 分组大小:16 字节
- 填充方式:PKCS#7
- 原文长度对 16 取余 r = 原文长度 % 16
- 填充字节数 = 16 – r(如果 r=0,则填充 16 字节)
增加空间百分比公式
增加百分比=原文字节数16÷(原文字节数mod16)×100%
2️⃣ 计算示例
| 原文大小 | 填充字节数(最坏情况) | 增加百分比(约) |
|---|---|---|
| 1 字节 | 15 字节 | 1500% |
| 1 KB (1024 B) | 16 字节 | 1.56% |
| 1 MB (1,048,576 B) | 16 字节 | 0.0015% |
| 1 GB (1,073,741,824 B) | 16 字节 | 0.0000015% |
| 1 TB (1,099,511,627,776 B) | 16 字节 | 0.0000000015% |
3️⃣ 总结
- 非常小的文件(1 字节、几 KB):填充占比很高,可能几倍
- 普通文件(1 MB 以上):填充占比几乎可以忽略
- 大文件(GB / TB):填充占比微不足道
✅ 对大数据量来说,AES 加密不会显著增加文件大小。
号外——解密耗时
不同文本大小下,使用 AES-128 + AES-NI 解密的耗时估算表,假设单线程,解密速度约 1.5 GB/s,使用 NVMe SSD,I/O 足够快。
| 文本大小 | 字节数 (≈) | 解密耗时(秒) | 备注 |
|---|---|---|---|
| 10 MB | 1.05 × 10⁷ | 0.007 秒 | 几毫秒,瞬间完成 |
| 100 MB | 1.05 × 10⁸ | 0.07 秒 | 仍然非常快 |
| 1 GB | 1.07 × 10⁹ | 0.7 秒 | 几乎瞬时 |
| 10 GB | 1.07 × 10¹⁰ | 7 秒 | 秒级完成 |
| 100 GB | 1.07 × 10¹¹ | 70 秒 | 约 1 分钟多一点 |
| 1 TB | 1.07 × 10¹² | 700 秒 | ≈ 11–12 分钟 |
| 10 TB | 1.07 × 10¹³ | 7000 秒 | ≈ 2 小时 |