AES 作为块加密算法(block cipher)
,要求被加密数据具有固定的大小,比如16 字节。那么对于一段任意大小的明文,对最后一个块补全到 16 字节就是一个必要的过程。以及在解密时将 padding 字节删除。
那么这里的关键问题便是如何设计这个 padding 方法,使解密后能够只通过明文便可以精准的切掉小尾巴。
容易发现,任何魔法字节都是不可靠的,即 pad 自身必须包含明确的描述 pad 长度的信息。出于同样的考虑,即使原始信息正好膜 16 余 0,pad 也是需要加的,这种情况可以加一个长度 16 的 pad。那么因为 pad 长度最高 16,最小 1,使用一个字节完全可以描述,那么我们可以约定:
每段明文在加密前都会添加一个 1-16 字节的 pad,使总长度膜 16 余 0。
pad 的长度由 pad 的最后一个字节描述
这样就生成了一个可靠的 padding 方法,其实也就是: PKCS7。<-- 这什么破渲染器
不过 PKCS7 在此之上还加了一层改进:就是明确要求 pad 的每个字节都是 pad 长度。这样解密后的明文更加易读。也可以做额外的判断,如果你想的话。