日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

des加密去掉特殊字符_对称加密中的数据填充

發布時間:2024/9/18 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 des加密去掉特殊字符_对称加密中的数据填充 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如 AES,DES 一類的分組對稱加密算法要求明文數據的字節長度必須是其塊大小的倍數,因此在加密明文數據之前我們必須對明文數據進行填充。

概述

在分組對稱加密算法中,我們通常在加密之前在明文數據的末尾添加對應的填充數據使數據達到算法塊大小的倍數;并且在解密數據之后將對應的填充內容去掉。

填充的方法具體來說分為基于二進制位 bit 的和基于字節 byte 的。其中基于字節的填充分為:ANSI X9.23,ISO 10126,PKCS#5 與 PKCS#7,零填充。本文中涉及到的字節數據均使用 16 進制表示。

本篇文章資料來源于 Padding (cryptography)。

二進制位填充(Bit Padding)

二進制位填充可以用于填充任意大小的明文數據。二進制位填充的原理是在數據的末尾的第一個二進制位填充 1,然后在后面填充 0,0 的數量由業務需要的填充位數決定。

二進制位填充可以填充以二進制位為單位的數據,也可以填充以字節為單位的數據。當它以字節為單位進行填充時,又稱為 ISO/IEC 7816-4 填充,也就是填充內容類似 0x80 0x00 這樣的填充。

下面是一個基于二進制位的填充案例,假設我們有一個 23 bit 的明文數據,需要填充 9 bit 到 32 bit,那么我們需要填充 1 bit 的 1 和 8 bit 的 0 :

# 明文數據 ...... | 1011 1001 1101 0100 0010 011 # 填充后的數據 ...... | 1011 1001 1101 0100 0010 011 1 0000 0000 |

對于字節填充來說,假設我們需要將數據填充 4 個 byte 達到 8 byte 的塊大小,我們需要在數據末尾的第一個字節填充 0x80,后面三個字節填充 0x00:

# 明文數據 ...... | DD DD DD DD DD DD DD DD | DD DD DD DD # 填充后的數據 ...... | DD DD DD DD DD DD DD DD | DD DD DD DD 80 00 00 00 |

ANSI X9.23

ANSI X9.23 是針對塊大小為 8 的算法設計的填充模式,需要注意的是該標準已經被撤銷。

在 ANSI X9.23 中,使用 0x01 到 0x08 對數據進行填充。對于填充內容可以使用任意隨機數(一般來說固定使用 0x00),并且將填充內容的最后一個字節設置為填充內容的長度。事實上我們可以很容易的將該標準應用于填充 0x01 到 0xFF 范圍的數據塊。

下面是塊大小為 8 個字節,需要填充 4 個字節的內容:

# 明文數據 ...... | DD DD DD DD DD DD DD DD | DD DD DD DD # 填充后的數據 ...... | DD DD DD DD DD DD DD DD | DD DD DD DD 00 00 00 04 |

注意:ANSI X9.23 對于剛好是塊大小倍數的明文數據不進行填充。

ISO 10126

ISO 10126 目前也是已經撤銷的標準,它在設計上和 ANSI X9.23 標準有些類似,均是通過隨機數作為填充內容并在填充內容的最后一個字節指定填充內容的長度。

下面是塊大小為 8 個字節,需要填充 4 個字節的內容:

# 明文數據 ...... | DD DD DD DD DD DD DD DD | DD DD DD DD # 填充后的數據 ...... | DD DD DD DD DD DD DD DD | DD DD DD DD 81 A6 23 04 |

注意:ISO 10126 對于剛好是塊大小倍數的明文數據也會進行填充^1:

下面是塊大小為 8 個字節,需要填充 8 個字節的內容:

# 明文數據 ...... | DD DD DD DD DD DD DD DD | # 填充后的數據 ...... | DD DD DD DD DD DD DD DD | 98 EF 35 27 81 A6 23 08 |

PKCS#5 與 PKCS#7

PKCS#7 實際上是為了支持 AES 算法而對 PKCS#5 做的擴展,因為 PKCS#5 設計上只是針對 8 字節大小的塊做填充的。也就是說,在實踐中 PKCS#5 和 PKCS#7 是等同的。

PKCS#7 的 RFC 規范見 RFC 5652 - Section-6.3。

PKCS#7 的填充內容其實就是要填充的數據長度,如果要填充 N 個字節,那么每個字節都是 N 。需要添加的字節數取決于塊的大小,當且僅當 N 小于 256 時,該填充方法是有效的。

填充的內容可能是下面的某一種:

01 02 02 03 03 03 04 04 04 04 05 05 05 05 05 06 06 06 06 06 06 06 ......

下面是塊大小為 8 個字節,需要填充 4 個字節內容;和塊大小為 8 個字節,需要填充 8 個字節內容的案例:

# 明文數據 ...... | DD DD DD DD DD DD DD DD | DD DD DD DD # 填充后的數據 ...... | DD DD DD DD DD DD DD DD | DD DD DD DD 04 04 04 04 |# 明文數據 ...... | DD DD DD DD DD DD DD DD | # 填充后的數據 ...... | DD DD DD DD DD DD DD DD | 08 08 08 08 08 08 08 08 08 |

這里如果數據長度已經是塊大小的倍數了,還是需要填充塊大小長度的填充內容。只有這樣在解密的時候,算法才能確定的認為解密出來的數據的最后一位是填充的內容,并且填充的數據長度就是該字節的大小。否則,算法無法判斷最后一個字節是填充值還是明文值,也就無法進行去掉填充內容的操作。

零填充

零填充是指將需要填充的所有字節都填充為零,該方案尚未被標準化。零填充也被叫做空填充或零字節填充。

下面是塊大小為 8 個字節,需要填充 4 個字節內容的案例:

...... | DD DD DD DD DD DD DD DD | DD DD DD DD 00 00 00 00 |

注意:如果填充的明文數據本來就以一個或多個零字節接收,那么零填充在解密后可能無法被去填充,原因是解密算法無法區分零字節是明文數據的還是填充內容。一般而言,比較適用于填充二進制編碼的字符串,在字符串中空字符 0x00 被看做是字符串結束的字節,是可以被剝離的。

如果數據長度已經是塊大小的倍數了,視情況可以填充塊大小長度的填充內容,這視具體的實現而定。

總結

以上是生活随笔為你收集整理的des加密去掉特殊字符_对称加密中的数据填充的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。