2015-10-14 140 views
0

我目前正在爲「定製」嵌入式設備實現SHA256散列算法。 顯然,我有一個消息填充問題。 我寫的例程不適用於消息,其大小爲正好等於512位SHA256:填充512位長度的消息

在這種情況下,應該如何填充消息? 即

M = "AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPP" 

Z.

回答

3

即使它開始作爲正好512位,你仍然需要墊的消息。

FIPS 180-4,§5.1.1如下解釋它:

假設消息,M的長度爲L比特。在消息結尾附加位「1」,接着是k個零位,其中k是等式L + 1 +k≡448mod 512的最小非負解。然後附加與使用二進制表示表示的數字L相等的64位塊。

[I取代L對沒有正確地顯示字符]

+0

我試過了。但是我沒有得到預期的結果。 您能否詳細說明填充塊的六進製表示? – Zyend

+0

通過所有測試的實現如何通過它? http://codereview.stackexchange.com/q/13288/489 –

0

對於數據是塊的大小PKCS#的整數倍7填充說必須添加填充的塊與每個字節設置爲填充字節數。在AES的情況下,塊大小爲16個字節,因此每個添加值爲0x10的16個字節。

PKCS#7 padding

注:PHP的mcrypt不做PKCS#7填充,它必須由用戶代碼來完成。