密码学番外篇 - 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

posted @ 2022-03-22 09:55  jiftle  阅读(261)  评论(0编辑  收藏  举报