Aes
如何通過 PKCS#7 正確填充 AES?
我想使用 PKCS#7 填充實現 AES-CBC 模式,以及在給定密文的情況下驗證正確填充的方法。我最初的理解是,對於大小
n
(n
小於 16)的輸入,PKCS#7 填充16-n
,直到輸入可以被 16 整除(或在這種情況下等於 16)。但後來我意識到這將無法驗證正確的填充。然後我發現在進行 PKCS#7 填充時你總是填充至少 1 個字節(
01
如果輸入的長度可以被所需的數量整除,則使用字節)。這種理解正確嗎?如果是這樣,我應該將我的輸入分成大小為 15 個字節的塊(第 16 個字節是填充字節)嗎?
然後我發現在進行 PKCS#7 填充時你總是填充至少 1 個字節(
01
如果輸入的長度可以被所需的數量整除,則使用字節)。這種理解正確嗎?實際上,如果輸入已經是 16 個字節的倍數,則填充將由 16 個
10
(十六進制)字節組成,您可以將其附加到輸入的末尾。然後,填充的輸入將是 16 字節的倍數(使用這種填充方法,即使原始輸入是奇數長度,情況總是如此)。如果是這樣,我應該將我的輸入分成大小為 15 個字節的塊(第 16 個字節是填充字節)嗎?
不; 您只需要在消息末尾添加填充 - 沒有理由(或許可,就 PKCS#7 而言)向中間塊添加填充。