日韩欧美国产极速不卡一区,国产手机视频在线观看尤物,国产亚洲欧美日韩蜜芽一区,亚洲精品国产免费,亚洲二区三区无码中文,A大片亚洲AV无码一区二区三区,日韩国语国产无码123

您好,歡迎來到維庫電子市場網(wǎng) 登錄 | 免費(fèi)注冊

MD5算法
閱讀�12581時間�2011-06-10 09:07:55

  MD5算法即Message-Digest Algorithm 5(信�-摘要算法5�,是一種用于產(chǎn)生數(shù)字簽名的單項(xiàng)散列算法。它的作用是讓大容量信息在用�(shù)字簽名軟件簽私人密匙前被"壓縮"成一種保密的格式�

�(zhí)行步�

  算法輸入是一個字節(jié)串,每個字節(jié)�8個bit.

  算法的執(zhí)行分為以下幾個步驟:

  �,補(bǔ)位:

  MD5算法先對輸入的數(shù)�(jù)�(jìn)行補(bǔ)位,使得�(shù)�(jù)的長�(以byte為單�)�64求余的結(jié)果是56�

  即數(shù)�(jù)�(kuò)展至LEN=K*64+56個字節(jié),K為整�(shù)�

  �(bǔ)位方法:�(bǔ)一�1,然后補(bǔ)0至滿足上述要求。相�(dāng)于補(bǔ)一�0x80的字節(jié),再�(bǔ)�

  �0的字節(jié)。這一步里總共�(bǔ)充的字節(jié)�(shù)�0�63��

  第二步,附加�(shù)�(jù)長度�

  用一�64位的整數(shù)表示�(shù)�(jù)的原始長�(以bit為單�),將這個數(shù)字的8個字節(jié)按低位的在前�

  高位在后的順序附加在�(bǔ)位后的數(shù)�(jù)后面。這時,數(shù)�(jù)被填�(bǔ)后的總長度為�

  LEN = K*64+56+8=(K+1)*64 Bytes�

  ※注意那�64位整�(shù)是輸入數(shù)�(jù)的原始長度而不是填充字節(jié)后的長度,我就在這里栽了跟頭.

  第三�,初始化MD5參數(shù)�

  有四�32位整�(shù)變量 (A,B,C,D) 用來�(jì)算信息摘�,每一個變量被初始化成以下

  以十六�(jìn)制數(shù)表示的數(shù)值,低位的字節(jié)在前��

  word A: 01 23 45 67

  word B: 89 ab cd ef

  word C: fe dc ba 98

  word D: 76 54 32 10

  ※注意低位的字節(jié)在前面指的是Little Endian平臺上內(nèi)存中字節(jié)的排列方式,

  而在程序中書寫時,要寫成�

  A=0x67452301

  B=0xefcdab89

  C=0x98badcfe

  D=0x10325476

  第四�,定義四個MD5基本的按位操作函�(shù)�

  X,Y,Z�32位整�(shù)�

  F(X,Y,Z) = (X and Y) or (not(X) and Z)

  G(X,Y,Z) = (X and Z) or (Y and not(Z))

  H(X,Y,Z) = X xor Y xor Z

  I(X,Y,Z) = Y xor (X or not(Z))

  再定義四個分別用于四輪變換的函數(shù)�

  �(shè)Mj表示消息的第j個子分組(從0�15��<<

  FF(a,b,c,d,Mj,s,ti)表示a=b+((a+(F(b,c,d)+Mj+ti)<<

  GG(a,b,c,d,Mj,s,ti)表示a=b+((a+(G(b,c,d)+Mj+ti)<<

  HH(a,b,c,d,Mj,s,ti)表示a=b+((a+(H(b,c,d)+Mj+ti)<<

  II(a,b,c,d,Mj,s,ti)表示a=b+((a+(I(b,c,d)+Mj+ti)<<

  第五�,對輸入�(shù)�(jù)作變換:

  處理�(shù)�(jù),N是總的字節(jié)�(shù),以64個字節(jié)為一�,每組作一次循�(huán),每次循�(huán)�(jìn)行四輪操��

  要變換的64個字節(jié)�16�32位的整數(shù)�(shù)組M[0 ...15]表示。而數(shù)組T[1 ... 64]表示一組常�(shù)�

  T[i]�4294967296*abs(sin(i))�32位整�(shù)部分,i的單位是弧度,i的取值從1�64�

  具體過程如下�

  /* �(shè)置主循環(huán)變量 */

  For i = 0 to N/16-1 do

  /*每循�(huán)一�,把�(shù)�(jù)原文存放�16個元素的�(shù)組X�. */

  For j = 0 to 15 do

  Set X[j] to M[i*16+j].

  end /�(jié)束對J的循�(huán)

  /* Save A as AA, B as BB, C as CC, and D as DD.

  */

  AA = A

  BB = B

  CC = C

  DD = D

  /* �1�*/

  /* � [abcd k s i]表示如下操作

  a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */

  /* Do the following 16 operations. */

  [ABCD  0  7  1]  [DABC  1 12  2]  [CDAB  2 17  3]  [BCDA  3 22  4]

  [ABCD  4  7  5]  [DABC  5 12  6]  [CDAB  6 17  7]  [BCDA  7 22  8]

  [ABCD  8  7  9]  [DABC  9 12 10]  [CDAB 10 17 11]  [BCDA 11 22 12]

  [ABCD 12  7 13]  [DABC 13 12 14]  [CDAB 14 17 15]  [BCDA 15 22 16]

  /* �2�* */

  /* � [abcd k s i]表示如下操作

  a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */

  /* Do the following 16 operations. */

  [ABCD  1  5 17]  [DABC  6  9 18]  [CDAB 11 14 19]  [BCDA  0 20 20]

  [ABCD  5  5 21]  [DABC 10  9 22]  [CDAB 15 14 23]  [BCDA  4 20 24]

  [ABCD  9  5 25]  [DABC 14  9 26]  [CDAB  3 14 27]  [BCDA  8 20 28]

  [ABCD 13  5 29]  [DABC  2  9 30]  [CDAB  7 14 31]  [BCDA 12 20 32]

  /* �3�*/

  /* � [abcd k s i]表示如下操作

  a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */

  /* Do the following 16 operations. */

  [ABCD  5  4 33]  [DABC  8 11 34]  [CDAB 11 16 35]  [BCDA 14 23 36]

  [ABCD  1  4 37]  [DABC  4 11 38]  [CDAB  7 16 39]  [BCDA 10 23 40]

  [ABCD 13  4 41]  [DABC  0 11 42]  [CDAB  3 16 43]  [BCDA  6 23 44]

  [ABCD  9  4 45]  [DABC 12 11 46]  [CDAB 15 16 47]  [BCDA  2 23 48]

  /* �4�*/

  /* � [abcd k s i]表示如下操作

  a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */

  /* Do the following 16 operations. */

  [ABCD  0  6 49]  [DABC  7 10 50]  [CDAB 14 15 51]  [BCDA  5 21 52]

  [ABCD 12  6 53]  [DABC  3 10 54]  [CDAB 10 15 55]  [BCDA  1 21 56]

  [ABCD  8  6 57]  [DABC 15 10 58]  [CDAB  6 15 59]  [BCDA 13 21 60]

  [ABCD  4  6 61]  [DABC 11 10 62]  [CDAB  2 15 63]  [BCDA  9 21 64]

  /* 然后�(jìn)行如下操� */

  A = A + AA

  B = B + BB

  C = C + CC

  D = D + DD

  Next i /* �(jié)束對I的循�(huán)*/

  第六�,輸出結(jié)��

  A,B,C,D連續(xù)存放,共16個字節(jié)�128�。按十六�(jìn)制依次輸出這�16個字節(jié)�

  ,用程序語言�(shí)�(xiàn)算法�,可以輸入以下幾個信息對程序作一個簡單的測試�

  看看程序有沒有錯誤�

  MD5 ("") = d41d8cd98f00b204e9800998ecf8427e

  MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661

  MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72

  MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0

  MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b

  MD5 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") =

  d174ab98d277d9f5a5611c2c9f419d9f

  MD5 ("123456789012345678901234567890123456789012345678901234567890123456789

  01234567890") = 57edf4a22be3c955ac49da2e2107b67a

�(yīng)�

  MD5的典型應(yīng)用是對一段信息(Message)產(chǎn)生信息摘要(Message-Digest�,以防止被篡改。比�,在UNIX下有很多軟件在下載的時候都有一個文件名相同,文件擴(kuò)展名�.md5的文件,在這個文件中通常只有一行文�,大致結(jié)�(gòu)如:

  MD5 (tanajiya.tar.gz) = 0ca175b9c0f726a831d895e269332461

  這就是tanajiya.tar.gz文件的數(shù)字簽�。MD5將整個文件當(dāng)作一個大文本信息� 通過其不可逆的字符串變換算�,產(chǎn)生了這個的MD5信息摘要。如果在以后傳播這個文件的過程�,無論文件的�(nèi)容發(fā)生了任何形式的改變(包括人為修改� 者下載過程中線路不穩(wěn)定引起的傳輸錯誤等),只要你對這個文件重新計(jì)算MD5時就會發(fā)�(xiàn)信息摘要不相�,由此可以確定你得到的只是一個不正確的文件。如� 再有一個第三方的認(rèn)證機(jī)�(gòu),用MD5還可以防止文件作者的"抵賴",這就是所謂的�(shù)字簽名應(yīng)��

  MD5也常常在某些軟件下載站點(diǎn)的軟件信息中看到其MD5�,它的作用就在于我們可以在下載該軟件后,對下載回來的文件用專門的軟件(如Windows MD5 Check等)做一次MD5校驗(yàn),以確保我們獲得的文件與該站點(diǎn)提供的文件為同一文件。利用MD5算法來�(jìn)行文件校�(yàn)的方案被大量�(yīng)用到軟件下載�、論壇數(shù)�(jù)庫、系�(tǒng)文件、安全等方面�

  MD5還廣泛用于操作系�(tǒng) 的登陸認(rèn)證上,如Unix、各類BSD系統(tǒng) � 錄密碼、數(shù)字簽名等諸多方面。如在UNIX系統(tǒng)中用戶的密碼是以MD5(或其它類似的算法)�(jīng)Hash�(yùn)算后存儲在文件系�(tǒng)中。當(dāng)用戶登錄的時�,系�(tǒng)把用 戶輸入的密碼�(jìn)行MD5 Hash�(yùn)算,然后再去和保存在文件系統(tǒng)中的MD5值�(jìn)行比�,�(jìn)而確定輸入的密碼是否正確。通過這樣的步�,系�(tǒng)在并不知道用戶密碼的明碼的情況下就可 以確定用戶登錄系�(tǒng)的合法�。這可以避免用戶的密碼被具有系�(tǒng)管理員權(quán)限的用戶知道�

工具

  WinMD5 v2.05(需�.NET�(yùn)行庫):https://www.blisstonia.com/software/WinMD5/WinMD5v2.05.zip

  WinMD5 v1.1(無需.NET支持): https://www.blisstonia.com/software/WinMD5/WinMD5v1.1.zip

  HashCalc v2.01:https://www.slavasoft.com/zip/hashcalc.zip

  HashTab Windows Shell Extension v1.9:https://beeblebrox.org/hashtab/hashtab_setup.exe

維庫電子�,電子知�,一查百��

已收錄詞�153979

平谷�| 离岛�| 松阳�| 丰宁| 渝北�| 松桃| 安远�| 遵义�| 霍林郭勒�| 桐乡�| 长春�| 高要�| 梁山�| 涞水�| 峡江�| 西畴�| 延庆�| 台江�| 宿州�| 新津�| 连南| 安康�| 修武�| 洛阳�| 昌都�| 巴东�| 柏乡�| 明光�| 余干�| 呼玛�| 屏边| 阜南�| 迁安�| 玛纳斯县| 唐海�| 南华�| 桐梓�| 济阳�| 浠水�| 陆河�| 白玉�|