密码学番外篇 - Padding模式
在对于数据进行加密的时候,某些加密算法需要明文满足某些长度的要求,比如DES和AES等分组加密需要明文满足是分组的倍数,但是大多数情况下,明文恰好满足需求的概率是非常低的,在之前的实现中,我的实现均没有考虑不满足加密长度的情况,也就是我自己保证了我传入的内容就是满足需求的,本文将聊一聊在不满足的情况下如何进行Padding。
NoPadding
顾名思义,这个就是不填充,也就是之前我采取的模式,这个要求原始数据必须就是满足分组要求的数据,不满足的时候,无法使用该模式。
NoPadding
PKCS5/PKCS7
填充至符合块大小的整数倍,填充值为填充数量数,PKCS5Padding的块大小应为8个字节,而PKCS7Padding的块大小可以在1~255的范围内。因为AES块的大小恰好为8个字节,因此对于AES的Padding来说,这两种方式是一样的。
PKCS5/PKCS7
X923Padding
填充至符合块大小的整数倍,填充值最后一个字节为填充的数量数,其他字节填0
X923Padding
ISO10126Padding
填充至符合块大小的整数倍,填充值最后一个字节为填充的数量数,其他字节填充随机字节。
ISO10126Padding
ISO7816-4Padding
填充至符合块大小的整数倍,填充值第一个字节为0x80,其他字节填0x00。
ISO7816-4Padding
TBCPadding(Trailling-Bit-Compliment)
填充至符合块大小的整数倍,原文最后一位为1时填充0x00,最后一位为0时填充0xFF。
TBCPadding
PKCS1Padding
填充格式如下:
Padding = 00 + BT + PS + 00 + D
1
00为固定字节
BT为处理模式
PS为填充字节,填充数量为k - 3 - D,k表示密钥长度, D表示原文长度。PS的最小长度为8个字节。填充的值根据BT值来定:
BT = 00时,填充全00
BT = 01时,填充全FF
BT = 02时,随机填充,但不能为00。
PKCS1Padding
总结
上面我只是介绍了几个比较常见的Padding方案,下面来做一个总结,来对比一下这几个Padding方案的区别。
Padding方案 是否记录长度 是否有随机字节的参与
PKCS5/PKCS7 ✅ ❎
X923Padding ✅ ❎
ISO10126Padding ✅ ✅
ISO7816-4Padding ❎ ❎
TBCPadding ❎ ❎
PKCS1Padding ✅ ✅
代码实现
这次代码引入了一个package,因为有些padding需要随机数的参与。
————————————————
版权声明:本文为CSDN博主「Litt1eQ」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/anonymous_qsh/article/details/120690397