同样的 AES 加密,ECB 模式加密后企鹅轮廓清晰可见,CBC 模式则变成纯噪声。亲手加密一只企鹅,看工作模式如何决定安全性。
从预设中选一张,或上传自己的图片。图片越有大片同色区域,ECB 效果越明显。
三分钟搞懂为什么 ECB 会泄漏、CBC 为什么不会。
AES 一次处理固定长度的块——16 字节。无论密钥是 128 位还是 256 位,块大小不变。图片的像素数据被当成一连串字节,按 16 字节切块。
ECB 把每块独立加密,块之间零关联。相同的 16 字节明文 → 永远得到相同的 16 字节密文。图片有大片同色区域(企鹅白肚皮、纯色背景),这些区域产生大量相同的明文块,加密后依旧是大量相同的密文块——轮廓、边缘、纹理原样泄漏。
CBC 在每块加密前,先与前一块密文做 XOR,再加密。第一块与随机 IV 做 XOR。相同的明文块 → 因前一块不同而产生不同的密文块。输出变成不可辨认的纯噪声,肉眼完全看不出原图。
别用 ECB。用 CBC(需自己处理认证)、CTR(流模式)、或 GCM(带认证,首选)。更重要的是:不要自己拼加密方案,用成熟库的安全默认模式。AES 算法本身是安全的,出问题的是你选的工作模式。