Understanding Padding Schemes
比较 PKCS#7, zero padding, and ISO 10126, and learn why padding matters for block ciphers.
问题
你的阻止 cipher requires 输入到 是多个的 阻止大小, 但你的数据是 不, 所以你 need 到 pad 它正确.
前置条件
- Understanding 的阻止 ciphers
- Knowledge 的阻止大小 (16 bytes 为 AES)
步骤
-
1. Understand why padding is needed
Block ciphers like AES process data in fixed-size blocks (16 bytes). If the plaintext is not a multiple of the block size, the last block is incomplete. Padding adds bytes to fill the block and must be removable without ambiguity.
输入13 bytes of data输出pad to 16 bytes -
2. Choose a padding scheme
PKCS#7 (the standard for AES) appends N bytes each with value N, where N is the number of padding bytes. If the data is already block-aligned, a full block of padding is added. Zero padding appends zeros but is ambiguous if the data ends with zeros. ISO 10126 uses random bytes with the last byte indicating the count.
输入PKCS#7 on 'test' (4 bytes)输出'test' + 0x0C × 12 -
3. Remove padding after decryption
After decryption, strip the padding to recover the original. For PKCS#7, read the last byte's value N and remove N bytes, verifying they all equal N. If verification fails, the padding is invalid, indicating a wrong key or tampering.
输入'test' + 0x0C × 12输出'test' (4 bytes)
预期结果
正确 padded plaintext 该 encrypts 到有效阻止-aligned ciphertext 和 unambiguously unpads 之后解密.
常见错误
- Using zero padding on data that ends with zeros
- Zero padding is ambiguous. Use PKCS#7, which always adds a padding block and is unambiguous.
- Not adding padding when data is block-aligned
- PKCS#7 always adds at least one byte. Without this, you cannot distinguish padded from unpadded data.
排障指引
- If unpadding fails with 'invalid padding', the key is likely wrong or the ciphertext was corrupted.
- Use GCM or CTR mode to avoid padding entirely if possible.
安全限制
- Padding oracle attacks exploit padding validation errors. Use authenticated encryption (GCM) to prevent them.