我需要理解MD5散列算法。我在讀一個文檔和它指出填充MD5散列算法
「的消息是‘填補結束’(擴展),使得它的長度(位)是 全等448,模512即,該消息被擴展,以便 它只有64位是512位長的倍數 即使消息的長度爲 已經與448相等,模512,也總是執行填充。「
我需要理解這是什麼意思,在簡單的術語,特別是448模512.單詞MODULO是問題。請給我一些簡單的例子。有趣的是,這是MD5哈希的第一步! :)
感謝
我需要理解MD5散列算法。我在讀一個文檔和它指出填充MD5散列算法
「的消息是‘填補結束’(擴展),使得它的長度(位)是 全等448,模512即,該消息被擴展,以便 它只有64位是512位長的倍數 即使消息的長度爲 已經與448相等,模512,也總是執行填充。「
我需要理解這是什麼意思,在簡單的術語,特別是448模512.單詞MODULO是問題。請給我一些簡單的例子。有趣的是,這是MD5哈希的第一步! :)
感謝
模(MOD),是導致告訴你的餘兩個數字之間互相分割的功能。
例如:
5模3:
5/3 = 1,2的餘數。所以5 mod 3是2.
10 modulo 16 = 10,因爲不能做16。
15模5 = 0,因爲15進入5次正好3次。 15是5的倍數。
回到學校,你會認爲這是「剩餘」或「剩餘」,模數只是一種奇特的說法。
這裏說的是,當你使用MD5時,首先發生的事情之一是你填寫你的消息的時間足夠長。在MD5的情況下,您的消息必須是n位,其中n =(512 * z)+448,z是任意數字。作爲一個例子,如果你有一個1472位長的文件,那麼你將能夠使用它作爲MD5哈希,因爲1472模512 = 448。如果該文件長1400比特,那麼你會在運行MD5算法的其餘部分之前,需要額外填充72位。
模數是餘數的劃分。在示例
512 mod 448 = 64
448 mod 512 = 448
512 MOD 448的另一種方法是將它們劃分四百四十八分之五百十二= 1.142 ..
然後你從結果數點乘以448之前減去512:
512 - 448*1 == 64 That's your modulus result.
你需要知道的是,448是比512多64位。
但是,如果它介於448和512之間?
通常我們需要用x(模數結果)減去448。
447 mod 512 = 447; 448 - 447 = 1; (all good, 1 zero to pad)
449 mod 512 = 1; 448 - 449 = -1 ???
所以這個問題的解決方案將採取512的更高的倍數,但仍然較短的64;
512*2 - 64 = 960
449 mod 512 = 1; 960 - 449 = 511;
這是因爲之後我們需要添加64位原始消息和全長必須要多512
960 - 449 = 511;
511 + 449 + 64 = 1024;
1024 is multiple of 512;