Encryption
了解使用分組密碼時填充的工作原理
我試圖了解使用分組密碼時填充是如何工作的。
當純文字的大小不是塊大小的倍數時,可能需要填充
如果是這樣,那麼我不明白我在我的 Ubuntu VM 上得到的結果。
我創建了一個 20 字節大小的 .txt 文件,並使用 AES128-ECB 對其進行了加密。然後我執行了一個命令來檢查加密的 .bin 文件大小,它是 32 字節,正如預期的那樣。
我不明白的是以下場景——我創建了另一個 .txt 文件,這次大小為 32 字節,使用相同的方法對其進行了加密,當我檢查加密文件的大小時,我得到了 48 字節而不是 32 字節。
我的問題是為什麼我得到 48 個字節而不是 32 個字節?顯然這一次純文字的大小是塊大小的倍數,但它卻把它當作不是。
您的範例中用於分組密碼的填充方案是 PKCS#7 填充。
該方案規定:
每個添加字節的值是添加的字節數,即N字節,每個值N被添加。
問題是,如果明文是塊大小的倍數,則添加一個全新的填充塊。在這種情況下,它將是一個 16 字節的塊,值為 16。
這是必要的,因此解密算法可以確定地確定最後一個塊的最後一個字節是一個填充字節,它指示添加的填充字節的數量還是明文消息的一部分。
這就是為什麼當明文為 32 字節時,密文的大小為 48 字節的原因。這是每個明文的一個密文字節加上一個全新的填充塊