Padding填充模式
Padding填充模式
Padding(填充)是指在执行分组加密时,为了让明文长度刚好符合“分组大小的整数倍”,在明文末尾增加一些额外字节的过程。
我们在初次接触密码算法的过程中,使用一些专业的密码破解工具时往往能看到某些加密的过程中会有像PCKS#7等等的模式选项,经过查询我们可以得知这是一种密码在加密过程中对明文不满足特定长度倍数的一种特殊处理方法,以便更为快速方便的加密更为多样的明文消息。
举例:
TEA、DES 的 block size = 8 字节
AES 的 block size = 16 字节
如果明文长度不是 8 或 16 的整数倍,就必须“填满”这一块,才能加密。
为什么需要 Padding(填充)?
分组加密算法(Block Cipher)有一个不可改变的特点:
它只能处理固定长度的分组(block)
例如 TEA 一次只能处理 64 bit(8 字节)。
如果明文是:
HELLO (5 字节)
TEA 不能直接加密,因为 5 ≠ 8。
必须变成 8 字节,例如:
48 45 4C 4C 4F 03 03 03 ← PKCS#7 填充
于是 TEA 才能加密一个完整的 block。
因此我们在解密的过程中需要对padding填充模式进行选择以此来正确进行解密过程。
那么padding模式有哪些?这些具有哪些的特点?不同的分组密码一般选择什么padding模式呢?
填充模式
NoPadding
不填充,在此填充下原始数据必须是分组大小的整数倍,非整数倍时无法使用该模式,会报错。
PKCS5Padding / PKCS7Padding
填充至符合块大小的整数倍,填充值为填充数量数,需要填充7个字节,就全部填07。
原始:FF FF FF FF FF FF FF FF FF
填充:FF FF FF FF FF FF FF FF FF 07 07 07 07 07 07 07
PKCS5Padding 的块大小应为 8 个字节,而 PKCS7Padding 的块大小可以在 1~255 的范围内。但 SunJCE 的 Provider 实现中 PKCS5Padding 也按 PKCS7Padding 来进行处理了。
有个细节,如果明文刚好是块的整数倍,也要加填充。
ISO10126Padding
填充至符合块大小的整数倍,填充值最后一个字节为填充的数量数,其他字节随机处理。
原始:FF FF FF FF FF FF FF FF FF
填充:FF FF FF FF FF FF FF FF FF 3F 7A B4 09 14 36 07
ISO7816-4Padding
填充至符合块大小的整数倍,填充值第一个字节为 0x80,其他字节填 0。
原始:FF FF FF FF FF FF FF FF FF
填充:FF FF FF FF FF FF FF FF FF 80 00 00 00 00 00 00
ZeroBytePadding
填充至符合块大小的整数倍,填充值为 0
原始:FF FF FF FF FF FF FF FF FF
填充:FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00
X923Padding
填充至符合块大小的整数倍,填充值最后一个字节为填充的数量数,其他字节填 0。
原始:FF FF FF FF FF FF FF FF FF
填充:FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 07
TBCPadding(Trailing-Bit-Compliment)
填充至符合块大小的整数倍,原文最后一位为“1”时填充 0x00,最后一位为“0”时填充“0xFF”。
原始:FF FF FF FF FF FF FF FF FF
填充:FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00
原始:FF FF FF FF FF FF FF FF F0
填充:FF FF FF FF FF FF FF FF F0 FF FF FF FF FF FF FF
PKCS1Padding
该填充模式是 RSA 加密中使用的,详见 RFC 2313。RSA 加密时,需要将原文填充至密钥大小,填充的格式为:
00 + BT + PS + 00 + D
00 为固定字节
BT 为处理模式。公钥操作时为 02,私钥操作为 00 或 01
PS 为填充字节,填充数量为 k - 3 - D,k 表示密钥长度,D 表示原文长度。PS 的最小长度为 8 个字节。填充的值根据 BT 值不同而不同:
BT = 00 时,填充全 00
BT = 01 时,填充全 FF
BT = 02 时,随机填充,但不能为 00
- Title: Padding填充模式
- Author: HuAmI
- Created at : 2025-12-15 23:12:57
- Updated at : 2025-12-15 23:43:52
- Link: https://redefine.ohevan.com/2025/12/15/padding模式/
- License: This work is licensed under CC BY-NC-SA 4.0.