日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

md5加密算法的C(C++)代码实现

發布時間:2025/3/17 c/c++ 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 md5加密算法的C(C++)代码实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
算法的應用

  md5的典型應用是對一段信息(message)產生信息摘要(message-digest),以防止被篡改。比如,在unix下有很多軟件在下載的時候都有一個文件名相同,文件擴展名為.md5的文件,在這個文件中通常只有一行文本,大致結構如:

   md5 (tanajiya.tar.gz) = 0ca175b9c0f726a831d895e269332461

  這就是tanajiya.tar.gz文件的數字簽名。md5將整個文件當作一個大文本信息,通過其不可逆的字符串變換算法,產生了這個唯一的md5信息摘要。如果在以后傳播這個文件的過程中,無論文件的內容發生了任何形式的改變(包括人為修改或者下載過程中線路不穩定引起的傳輸錯誤等),只要你對這個文件重新計算md5時就會發現信息摘要不相同,由此可以確定你得到的只是一個不正確的文件。如果再有一個第三方的認證機構,用md5還可以防止文件作者的"抵賴",這就是所謂的數字簽名應用。

  md5還廣泛用于加密和解密技術上。比如在unix系統中用戶的密碼就是以md5(或其它類似的算法)經加密后存儲在文件系統中。當用戶登錄的時候,系統把用戶輸入的密碼計算成md5值,然后再去和保存在文件系統中的md5值進行比較,進而確定輸入的密碼是否正確。通過這樣的步驟,系統在并不知道用戶密碼的明碼的情況下就可以確定用戶登錄系統的合法性。這不但可以避免用戶的密碼被具有系統管理員權限的用戶知道,而且還在一定程度上增加了密碼被破解的難度。

  正是因為這個原因,現在被***使用最多的一種破譯密碼的方法就是一種被稱為"跑字典"的方法。有兩種方法得到字典,一種是日常搜集的用做密碼的字符串表,另一種是用排列組合方法生成的,先用md5程序計算出這些字典項的md5值,然后再用目標的md5值在這個字典中檢索。我們假設密碼的最大長度為8位字節(8 bytes),同時密碼只能是字母和數字,共26+26+10=62個字符,排列組合出的字典的項數則是p(62,1)+p(62,2)….+p(62,8),那也已經是一個很天文的數字了,存儲這個字典就需要tb級的磁盤陣列,而且這種方法還有一個前提,就是能獲得目標賬戶的密碼md5值的情況下才可以。這種加密技術被廣泛的應用于unix系統中,這也是為什么unix系統比一般操作系統更為堅固一個重要原因。

  算法描述

以下內容跟帖回復才能看到
==============================

  對md5算法簡要的敘述可以為:md5以512位分組來處理輸入的信息,且每一分組又被劃分為16個32位子分組,經過了一系列的處理后,算法的輸出由四個32位分組組成,將這四個32位分組級聯后將生成一個128位散列值。

  在md5算法中,首先需要對信息進行填充,使其字節長度對512求余的結果等于448。因此,信息的字節長度(bits length)將被擴展至n*512+448,即n*64+56個字節(bytes),n為一個正整數。填充的方法如下,在信息的后面填充一個1和無數個0,直到滿足上面的條件時才停止用0對信息的填充。然后,在在這個結果后面附加一個以64位二進制表示的填充前信息長度。經過這兩步的處理,現在的信息字節長度=n*512+448+64=(n+1)*512,即長度恰好是512的整數倍。這樣做的原因是為滿足后面處理中對信息長度的要求。

  md5中有四個32位被稱作鏈接變量(chaining variable)的整數參數,他們分別為:a=0x01234567,b=0x89abcdef,c=0xfedcba98,d=0x76543210。

  當設置好這四個鏈接變量后,就開始進入算法的四輪循環運算。循環的次數是信息中512位信息分組的數目。

  將上面四個鏈接變量復制到另外四個變量中:a到a,b到b,c到c,d到d。

  主循環有四輪(md4只有三輪),每輪循環都很相似。第一輪進行16次操作。每次操作對a、b、c和d中的其中三個作一次非線性函數運算,然后將所得結果加上第四個變量,文本的一個子分組和一個常數。再將所得結果向右環移一個不定的數,并加上a、b、c或d中之一。最后用該結果取代a、b、c或d中之一。
以一下是每次操作中用到的四個非線性函數(每輪一個)。

   f(x,y,z) =(x&y)|((~x)&z)
   g(x,y,z) =(x&z)|(y&(~z))
   h(x,y,z) =x^y^z
   i(x,y,z)=y^(x|(~z))
   (&是與,|是或,~是非,^是異或)

  這四個函數的說明:如果x、y和z的對應位是獨立和均勻的,那么結果的每一位也應是獨立和均勻的。
f是一個逐位運算的函數。即,如果x,那么y,否則z。函數h是逐位奇偶操作符。

  假設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)
  << 這四輪(64步)是:

  第一輪

   ff(a,b,c,d,m0,7,0xd76aa478)
   ff(d,a,b,c,m1,12,0xe8c7b756)
   ff(c,d,a,b,m2,17,0x242070db)
   ff(b,c,d,a,m3,22,0xc1bdceee)
   ff(a,b,c,d,m4,7,0xf57c0faf)
   ff(d,a,b,c,m5,12,0x4787c62a)
   ff(c,d,a,b,m6,17,0xa8304613)
   ff(b,c,d,a,m7,22,0xfd469501)
   ff(a,b,c,d,m8,7,0x698098d8)
   ff(d,a,b,c,m9,12,0x8b44f7af)
   ff(c,d,a,b,m10,17,0xffff5bb1)
   ff(b,c,d,a,m11,22,0x895cd7be)
   ff(a,b,c,d,m12,7,0x6b901122)
   ff(d,a,b,c,m13,12,0xfd987193)
   ff(c,d,a,b,m14,17,0xa679438e)
   ff(b,c,d,a,m15,22,0x49b40821)

  第二輪

   gg(a,b,c,d,m1,5,0xf61e2562)
   gg(d,a,b,c,m6,9,0xc040b340)
   gg(c,d,a,b,m11,14,0x265e5a51)
   gg(b,c,d,a,m0,20,0xe9b6c7aa)
   gg(a,b,c,d,m5,5,0xd62f105d)
   gg(d,a,b,c,m10,9,0x02441453)
   gg(c,d,a,b,m15,14,0xd8a1e681)
   gg(b,c,d,a,m4,20,0xe7d3fbc8)
   gg(a,b,c,d,m9,5,0x21e1cde6)
   gg(d,a,b,c,m14,9,0xc33707d6)
   gg(c,d,a,b,m3,14,0xf4d50d87)
   gg(b,c,d,a,m8,20,0x455a14ed)
   gg(a,b,c,d,m13,5,0xa9e3e905)
   gg(d,a,b,c,m2,9,0xfcefa3f8)
   gg(c,d,a,b,m7,14,0x676f02d9)
   gg(b,c,d,a,m12,20,0x8d2a4c8a)

  第三輪

   hh(a,b,c,d,m5,4,0xfffa3942)
   hh(d,a,b,c,m8,11,0x8771f681)
   hh(c,d,a,b,m11,16,0x6d9d6122)
   hh(b,c,d,a,m14,23,0xfde5380c)
   hh(a,b,c,d,m1,4,0xa4beea44)
   hh(d,a,b,c,m4,11,0x4bdecfa9)
   hh(c,d,a,b,m7,16,0xf6bb4b60)
   hh(b,c,d,a,m10,23,0xbebfbc70)
   hh(a,b,c,d,m13,4,0x289b7ec6)
   hh(d,a,b,c,m0,11,0xeaa127fa)
   hh(c,d,a,b,m3,16,0xd4ef3085)
   hh(b,c,d,a,m6,23,0x04881d05)
   hh(a,b,c,d,m9,4,0xd9d4d039)
   hh(d,a,b,c,m12,11,0xe6db99e5)
   hh(c,d,a,b,m15,16,0x1fa27cf8)
   hh(b,c,d,a,m2,23,0xc4ac5665)

  第四輪

   ii(a,b,c,d,m0,6,0xf4292244)
   ii(d,a,b,c,m7,10,0x432aff97)
   ii(c,d,a,b,m14,15,0xab9423a7)
   ii(b,c,d,a,m5,21,0xfc93a039)
   ii(a,b,c,d,m12,6,0x655b59c3)
   ii(d,a,b,c,m3,10,0x8f0ccc92)
   ii(c,d,a,b,m10,15,0xffeff47d)
   ii(b,c,d,a,m1,21,0x85845dd1)
   ii(a,b,c,d,m8,6,0x6fa87e4f)
   ii(d,a,b,c,m15,10,0xfe2ce6e0)
   ii(c,d,a,b,m6,15,0xa3014314)
   ii(b,c,d,a,m13,21,0x4e0811a1)
   ii(a,b,c,d,m4,6,0xf7537e82)
   ii(d,a,b,c,m11,10,0xbd3af235)
   ii(c,d,a,b,m2,15,0x2ad7d2bb)
   ii(b,c,d,a,m9,21,0xeb86d391)

  常數ti可以如下選擇:

  在第i步中,ti是4294967296*abs(sin(i))的整數部分,i的單位是弧度。(4294967296等于2的32次方)
所有這些完成之后,將a、b、c、d分別加上a、b、c、d。然后用下一分組數據繼續運行算法,最后的輸出是a、b、c和d的級聯。

  當你按照我上面所說的方法實現md5算法以后,你可以用以下幾個信息對你做出來的程序作一個簡單的測試,看看程序有沒有錯誤。

   md5 ("") = d41d8cd98f00b204e9800998ecf8427e
   md5 ("a") = 0cc175b9c0f1b6a831c399e269772661
   md5 ("abc") = 900150983cd24fb0d6963f7d28e17f72
   md5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0
   md5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b
   md5 ("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789") = d174ab98d277d9f5a5611c2c9f419d9f
   md5 ("12345678901234567890123456789012345678901234567890123456789012345678901234567890") = 57edf4a22be3c955ac49da2e2107b67a

  如果你用上面的信息分別對你做的md5算法實例做測試,最后得出的結論和標準答案完全一樣,那我就要在這里象你道一聲祝賀了。要知道,我的程序在第一次編譯成功的時候是沒有得出和上面相同的結果的。


  MD5的安全性

  md5相對md4所作的改進:

   1. 增加了第四輪;

   2. 每一步均有唯一的加法常數;

   3. 為減弱第二輪中函數g的對稱性從(x&y)|(x&z)|(y&z)變為(x&z)|(y&(~z));

   4. 第一步加上了上一步的結果,這將引起更快的雪崩效應;

   5. 改變了第二輪和第三輪中訪問消息子分組的次序,使其更不相似;

   6. 近似優化了每一輪中的循環左移位移量以實現更快的雪崩效應。各輪的位移量互不相同。
引用:[url]http://www.gameres.com/Articles/[/url] ... /Arithmetic/MD5.htm

==============================

轉載于:https://blog.51cto.com/lovesunny/96554

總結

以上是生活随笔為你收集整理的md5加密算法的C(C++)代码实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 公车激情云雨小说 | 欧美在线视频播放 | 大尺度床戏揉捏胸视频 | 亚洲理伦电影 | 人体内射精一区二区三区 | 在线观看视频色 | 看个毛片| 国产成人精品无码免费看81 | 中文字幕第88页 | 日本黄色录像片 | 国产精品久久婷婷 | 在线观看羞羞漫画 | 肉肉av福利一精品导航 | www婷婷av久久久影片 | av在线视屏| 日韩免费视频一区二区 | 99精品欧美一区二区三区综合在线 | 韩国伦理在线视频 | 爱吃波客今天最新视频 | 成人香蕉网 | 黄色大片在线 | 欧美成人天堂 | 久久精品国产77777蜜臀 | 浪潮av一区二区三区 | 人成精品 | 成人免费福利视频 | 一区在线看| 性高湖久久久久久久久免费 | 伊人久久精品 | 亚洲欧美日韩国产一区 | 美女扒开让男人桶爽 | 高清免费视频日本 | 国产又大又粗又爽的毛片 | 粉嫩精品久久99综合一区 | 欧美性受xxxx狂喷水 | 少妇性l交大片免费观看 | 波多野结衣中文字幕一区二区三区 | 男人天堂一区二区 | 亚洲一区二区三区人妻 | 国产特级aaaaaa大片 | 99国产精品99久久久久久粉嫩 | 色网站观看 | 三上悠亚 电影 | 久久爱伊人 | 美女隐私无遮挡网站 | wwwsss在线观看 | 国产精品波多野结衣 | 精品视频一区二区在线观看 | 久久久av一区二区三区 | 国产福利免费 | 日韩欧美国产片 | 一区二区三区视频免费观看 | 日韩av片在线播放 | 中文字幕第31页 | 红桃av在线| 激情一区 | 91精品一区二区三区四区 | 日本不卡视频一区二区 | 丰满人妻一区二区 | 日韩三级视频 | 麻豆传媒网站入口 | 高潮一区二区 | 麻豆视频网页 | 狠狠撸在线 | 欧洲成人一区二区三区 | 黄色av网站网址 | 性少妇bbw张开 | 国产激情网站 | 校园春色亚洲激情 | 五月激情久久 | 国产精品视频123 | 亚洲精品国产精华液 | 污网站免费在线 | 黄色操人视频 | 日韩精品极品视频在线观看免费 | www.青青草| 日韩有码中文字幕在线观看 | 在线播放精品视频 | 国产亚洲精品久久久久四川人 | 国产乱人乱偷精品视频 | 久久久久久久久电影 | 日日噜噜噜噜久久久精品毛片 | 囯产精品久久久久久 | 免费无码av片在线观看 | 亚洲一区网站 | 色小姐av| 特级西西444www高清大胆免费看 | 成人性生交大片免费看vrv66 | 九九热伊人 | 亚洲网在线观看 | 玖玖热视频 | 欧美韩日一区二区 | 深夜福利免费在线观看 | 午夜精品网站 | 色就是色欧美 | 日本精品视频在线观看 | 中文字幕在线观看视频www | 自拍偷拍精品 | 国产51视频 |