分組加密裡的 NoPadding 是怎麼填充的。不填充,最後一塊不加密,直接發明文?

時間 2021-07-10 07:23:06

1樓:Aries

最近寫密碼學大作業,其中乙個就是實現AES加密演算法。搜填充方式搜到了這個,就稍微總結一下吧,以後如果有人需要查填充方式的就省事一點。

AES看上去無非就是幾個步驟,但是其實分類蠻多的。

根據AES金鑰長度的不同,主要有三種實現

AES-128(常用)

AES-192

AES-256

從加密的模式上來說,包括以下五種模式

ECBCBC

CTROCF

CFB另外有些模式還需要初始向量IV,所以組合起來情況還是挺多的。在這五種模式裡,只有ECB和CBC模式明文資料要求填充至長度為分組長度(16)的整數倍[因為ECB,CBC的加密運算會影響結果,而OFB,CFB,CTR只是最後一步的異或明文,所以不會影響結果],所以我們需要填充

其實方法還是挺多的,具體到標準上來說,一般庫裡面實現的有下面幾種

PKCS5Padding

PKCS7Padding

NoPadding

ZerosPadding

ISO10126Padding

先說題主疑惑的Nopadding吧,我在Stackoverflow上找到了一篇文章

What exactly does the "NoPadding" parameter do in the Cipher class?

總結一下,就是用了Nopadding就代表著你對這個資料是否可以被完整分組負有責任,如果不能被完整分組就會報錯或者丟擲異常。

然後ZerosPadding意思就是在資料塊末尾補0x00,注意如果剛開始已經完整分組了也需要補一整個分組的0x00,否則無法解密

PKCS7Padding 就是資料個數最後少幾個就填充多少個數,具體的做法可以:資料的個數先取餘16,然後16減去餘數。

例如,總共9個數值,取餘16後是9,需要補充7個7,則最後資料變為

PKCS5Padding,PKCS7Padding的子集,塊大小固定為8位元組。在AES加密當中其實是沒有pkcs5的,因為AES的分塊是16B而pkcs5只能用於8B,所以我們在AES加密中所說的pkcs5指的就是pkcs7。

加密演算法裡的加密位數和金鑰直接的關係是?

瓦戈科技 加密位數和金鑰一般是一一對應的,AES 128要求金鑰應該是128位的,有些庫可能會在使用者金鑰基礎上進行一定策略的填充。感興趣可以檢視AES 128的一個演算法實現 Advanced Encryption Standard author Dani Huertas email huerta...

如何看待大學裡的分組作業?

蝸牛魚子醬 怒答一波真的煩死了 有認真做的也有想划水的 況且每個人能力不同老師還是給一樣的分 做得多的做得好的分數反而被拉下了 太不爽了 呵就此時此刻 我們的作業可能過不了 但是我的另乙個組員很開心的在刷手機 我他媽 她啥事都不慌,無所謂 作業也沒好好做,敷衍了事 做出來的敷衍品其他室友都看不下去,...

為啥要給能級分組? 分組的原理是什麼? 分組之後能幹啥?

咖啡兌茶名相思 乙個能級就是乙個或幾個同一能量的電子原子軌道的集合。1 為啥要給能級分組 給能級分組最大的作用是方便研究能級內軌道裡電子的能量以及其波函式能夠帶給我們的關於電子運動的資訊 軌道角動量等等 同時也可以直觀形象地把不同形狀的軌道按規律分組。2 分組的原理 能量區分不同能層,電子運動模式區...