分組密碼算法的填充模式

分組密碼中,需要將明文按指定大小進行分組,由於明文並非指定大小的整數倍,因此在明文的最後一個分組需要將其填充至加密算法所要求的分組大小後進行加密。

在解密時,按照同樣的填充模式將填充的數據去除。

斜體表示 SunJCE 支持,非斜體爲 BouncyCastle 支持

NOPADDING

不填充,在此填充下原始數據必須是分組大小的整數倍,非整數倍時無法使用該模式

PKCS5PADDING / PKCS7PADDING

填充至符合塊大小的整數倍,填充值爲填充數量數

  • 原始:FF FF FF FF FF FF FF FF FF
  • 填充:FF FF FF FF FF FF FF FF FF 07 07 07 07 07 07 07

PKCS5PADDING 的塊大小應爲 8 個字節,而 PKCS7PADDING 的塊大小可以在 1~255 的範圍內。但 SunJCE 的 Provider 實現中 PKCS5PADDING 也按 PKCS7PADDING 來進行處理了。

ISO10126PADDING

填充至符合塊大小的整數倍,填充值最後一個字節爲填充的數量數,其他字節隨機處理

  • 原始:FF FF FF FF FF FF FF FF FF
  • 填充:FF FF FF FF FF FF FF FF FF 3F 7A B4 09 14 36 07

ISO7816-4PADDING

填充至符合塊大小的整數倍,填充值第一個字節爲 0x80,其他字節填 0

  • 原始:FF FF FF FF FF FF FF FF FF
  • 填充:FF FF FF FF FF FF FF FF FF 80 00 00 00 00 00 00

ZEROBYTEPADDING

填充至符合塊大小的整數倍,填充值爲 0

  • 原始:FF FF FF FF FF FF FF FF FF
  • 填充:FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00

X923PADDING

填充至符合塊大小的整數倍,填充值最後一個字節爲填充的數量數,其他字節填 0

  • 原始:FF FF FF FF FF FF FF FF FF
  • 填充:FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 07

TBCPADDING(Trailing-Bit-Compliment)

填充至符合塊大小的整數倍,原文最後一位爲“1”時填充 0x00,最後一位爲“0”時填充“0xFF”

  • 原始:FF FF FF FF FF FF FF FF FF
  • 填充:FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00
  • 原始:FF FF FF FF FF FF FF FF F0
  • 填充:FF FF FF FF FF FF FF FF F0 FF FF FF FF FF FF FF

PKCS1PADDING

該填充模式是 RSA 加密中使用的,詳見 RFC 2313。RSA 加密時,需要將原文填充至密鑰大小,填充的格式爲:

00 + BT + PS + 00 + D

  • 00 爲固定字節
  • BT 爲處理模式。公鑰操作時爲 02,私鑰操作爲 0001
  • PS 爲填充字節,填充數量爲 k - 3 - Dk 表示密鑰長度,D 表示原文長度。PS 的最小長度爲 8 個字節。填充的值根據 BT 值不同而不同:
    • BT = 00 時,填充全 00
    • BT = 01 時,填充全 FF
    • BT = 02 時,隨機填充,但不能爲 00
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章