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