1. 程式人生 > 其它 >密碼學番外篇 - Padding模式

密碼學番外篇 - 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