md6演算法-九游会j9娱乐平台
① macos涓嬩嬌鐢∣penssl錛圠ibressl錛
openssl 鏄涓涓瀹夊叏濂楁帴瀛楀眰瀵嗙爜搴擄紝鍥婃嫭涓昏佺殑瀵嗙爜綆楁硶銆佸父鐢ㄧ殑瀵嗛掗鍜岃瘉涔﹀皝瑁呯$悊鍔熻兘鍙奡sl鍗忚錛屽苟鎻愪緵涓板瘜鐨勫簲鐢ㄧ▼搴忎緵嫻嬭瘯鎴栧叾瀹冪洰鐨勪嬌鐢ㄣ
鑷狾penssl鐖嗗嚭鈥滃績鑴忓け琛鈥濇紡媧炲悗鍏嗚~錛岃嫻鏋滃凡灝嗗師鏈夌殑 openssl 鏇挎崲涓 libressl銆
灝嗛暱搴︿笉鍥哄畾鐨勬秷鎮錛圡essage錛変綔涓鴻緭鍏ュ弬鏁幫紝榪愯岀壒瀹氱殑hash鍑芥暟錛岀敓鎴愬滻瀹氶暱搴︾殑杈撳嚭錛岃繖涓杈撳嚭灝辨槸hash錛屼篃縐頒負榪欎釜娑堟伅鐨勬秷鎮鎽樿侊紙message digest錛
甯哥敤鐨勫崟鍚戝搱甯岀畻娉曟湁錛 md5, sha1, sha256, sha512絳夈
md5綆楁硶涓128浣嶏紝sha-1涓160浣嶏紝sha-256涓256浣嶃
鍔犲瘑鐨勬秷鎮鎽樿丠mac錛圞eyed hash message authentication code錛
涓婇潰鎻愬埌鐨勫父瑙凥ash綆楁硶錛屽侻d5銆丼ha錛屽彧鏈変竴涓杈撳叆鍙傛暟錛氭秷鎮銆
濡傛灉杈撳叆鍙傛暟鏈変袱涓錛屼竴涓鏄娑堟伅錛圡essage錛夛紝鍙︿竴涓鏄縐橀掗錛圞ey錛夛紝灝嗕細鐢熸垚涓涓鍔犲瘑鐨勬秷鎮鎽樿丠mac銆
涓轟簡澧炲己hmac鐨勫畨鍏ㄦэ紝鍙瑕佸崌綰у姞瀵咹ash綆楁硶灝卞彲浠ユ寚鏁扮駭鍦板炲姞鐮磋в闅懼害銆備緥濡侶mac-md6, hmac-sha-3銆
鏇劇粡鏈変竴嬈¢潰璇曪紝闈㈣瘯瀹橀棶鍒板瘑鐮佸︺佹晱鍦嗗搱甯屽嚱鏁般侀伩鍏嶇版挒鐩稿叧鐨勯棶棰樸
鐢變簬鍝堝笇鍑芥暟鏄灝嗘墍鏈変笉瀹氶暱鏃忔嬁鑵旂殑娑堟伅杞鎹㈡垚瀹氶暱鐨勬秷鎮錛屾墍浠ユ秷鎮瀹歸噺涓瀹氬彉灝忎簡錛屼篃鏈夋湁鍙戠敓紕版挒鐨勫彲鑳姐傝繖鏃跺彲浠ラ氳繃澶氫釜鍝堝笇鍑芥暟浜ゅ弶楠岃瘉鏉ヨ繘涓姝ラ檷浣庡彂鐢熺殑鍙鑳芥с
甯哥敤鍙傛暟錛 -aes-128-cbc, -aes-128-cfb, -bf-cbc絳夈
鍏朵腑瀵嗙爜綆楁硶錛歜f, cast, des, aes, rs2絳夈
鍔犲瘑妯″紡錛歝bc, ecb, cfb, ofb絳夈
鍔犲瘑綆楁硶錛坈ipher錛夛紝鍔犲瘑妯″紡錛坋ncryption mode錛夛紝濉鍏咃紙padding錛夛紝鍒濆嬪悜閲忥紙iv錛
涓婇潰鎻愬埌鐨勭粰娑堟伅鍔犺в瀵嗛櫎浜嗛渶瑕佸姞瀵嗙畻娉昦es/des絳変箣澶栵紝榪橀渶瑕佸姞瀵嗘ā寮廵cb/cbc絳夈
瀵圭о鍔犲瘑閫氬父鏈夊洓縐嶆ā寮忥紙ecb銆丆bc銆丆fb銆丱fb錛
② md5加密問題
1.如果是一般的話只有32&16
2.本來在理論上不可破解,但好像被人破解了,你可以看下參考
目前網上的dm5破解都是通過建立資料庫進行查詢的方法進行破解的
好像還沒有直接破解的工具,網上的都屬於類似窮舉的方法
md5簡介
md5的全稱是message-digest algorithm 5(信息-摘要演算法),用於確保信息傳輸完整一致。在90年代初由mit laboratory for computer science和rsa data security inc,的ronald l. rivest開發出來,經md2、md3和md4發展而來。它的作用是讓大容量信息在用數字簽名軟體簽署私人密鑰前被"壓縮"成一種保密的格式(就是把一個任意長度的位元組串變換成一定長的大整數)。不管是md2、md4還是md5,它們都需要獲得一個隨機長度的信息並產生一個128位的信息摘要。雖然這些演算法的結構或多或少有些相似,但md2的設計與md4和md5完全不同,那是因為md2是為8位機器做過設計優化的,而md4和md5卻是面向32位的電腦。這三個演算法的描述和c語言源代碼在internet rfc 1321中有詳細的描述(http://www.ietf.org/rfc/rfc1321.txt),這是一份最權威的文檔,由ronald l. rivest在1992年8月向ietf提交。
rivest在1989年開發出md2演算法。在這個演算法中,首先對信息進行數據補位,使信息的位元組長度是16的倍數。然後,以一個16位的檢驗和追加到信息末尾。並且根據這個新產生的信息計算出散列值。後來,rogier和chauvaud發現如果忽略了檢驗和將產生md2沖突。md2演算法的加密後結果是唯一的--即沒有重復。
為了加強演算法的安全性,rivest在1990年又開發出md4演算法。md4演算法同樣需要填補信息以確保信息的位元組長度加上448後能被512整除(信息位元組長度mod 512 = 448)。然後,一個以64位二進製表示的信息的最初長度被添加進來。信息被處理成512位damg?rd/merkle迭代結構的區塊,而且每個區塊要通過三個不同步驟的處理。den boer和bosselaers以及其他人很快的發現了攻擊md4版本中第一步和第三步的漏洞。dobbertin向大家演示了如何利用一部普通的個人電腦在幾分鍾內找到md4完整版本中的沖突(這個沖突實際上是一種漏洞,它將導致對不同的內容進行加密卻可能得到相同的加密後結果)。毫無疑問,md4就此被淘汰掉了。
盡管md4演算法在安全上有個這么大的漏洞,但它對在其後才被開發出來的好幾種信息安全加密演算法的出現卻有著不可忽視的引導作用。除了md5以外,其中比較有名的還有sha-1、ripemd以及haval等。
一年以後,即1991年,rivest開發出技術上更為趨近成熟的md5演算法。它在md4的基礎上增加了"安全-帶子"(safety-belts)的概念。雖然md5比md4稍微慢一些,但卻更為安全。這個演算法很明顯的由四個和md4設計有少許不同的步驟組成。在md5演算法中,信息-摘要的大小和填充的必要條件與md5完全相同。den boer和bosselaers曾發現md5演算法中的假沖突(pseudo-collisions),但除此之外就沒有其他被發現的加密後結果了。
van oorschot和wiener曾經考慮過一個在散列中暴力搜尋沖突的函數(brute-force hash function),而且他們猜測一個被設計專門用來搜索md5沖突的機器(這台機器在1994年的製造成本大約是一百萬美元)可以平均每24天就找到一個沖突。但單從1991年到2001年這10年間,竟沒有出現替代md5演算法的md6或被叫做其他什麼名字的新演算法這一點,我們就可以看出這個瑕疵並沒有太多的影響md5的安全性。上面所有這些都不足以成為md5的在實際應用中的問題。並且,由於md5演算法的使用不需要支付任何版權費用的,所以在一般的情況下(非絕密應用領域。但即便是應用在絕密領域內,md5也不失為一種非常優秀的中間技術),md5怎麼都應該算得上是非常安全的了。
2004年8月17日的美國加州聖巴巴拉的國際密碼學會議(crypto』2004)上,來自中國山東大學的王小雲教授做了破譯md5、haval-128、 md4和ripemd演算法的報告,公布了md系列演算法的破解結果。宣告了固若金湯的世界通行密碼標准md5的堡壘轟然倒塌,引發了密碼學界的軒然大波。
令世界頂尖密碼學家想像不到的是,破解md5之後,2005年2月,王小雲教授又破解了另一國際密碼sha-1。因為sha-1在美國等國際社會有更加廣泛的應用,密碼被破的消息一出,在國際社會的反響可謂石破天驚。換句話說,王小雲的研究成果表明了從理論上講電子簽名可以偽造,必須及時添加限制條件,或者重新選用更為安全的密碼標准,以保證電子商務的安全。
md5破解工程權威網站http://www.md5crk.com/ 是為了公開徵集專門針對md5的攻擊而設立的,網站於2004年8月17日宣布:「中國研究人員發現了完整md5演算法的碰撞;wang, feng, lai與yu公布了md5、md4、haval-128、ripemd-128幾個 hash函數的碰撞。這是近年來密碼學領域最具實質性的研究進展。使用他們的技術,在數個小時內就可以找到md5碰撞。……由於這個里程碑式的發現,md5crk項目將在隨後48小時內結束」。
md5用的是哈希函數,在計算機網路中應用較多的不可逆加密演算法有rsa公司發明的md5演算法和由美國國家技術標准研究所建議的安全散列演算法sha.
[編輯本段]演算法的應用
md5的典型應用是對一段信息(message)產生信息摘要(message-digest),以防止被篡改。比如,在unix下有很多軟體在下載的時候都有一個文件名相同,文件擴展名為.md5的文件,在這個文件中通常只有一行文本,大致結構如:
md5 (tanajiya.tar.gz) =
這就是tanajiya.tar.gz文件的數字簽名。md5將整個文件當作一個大文本信息,通過其不可逆的字元串變換演算法,產生了這個唯一的md5信息摘要。為了讓讀者朋友對md5的應用有個直觀的認識,筆者以一個比方和一個實例來簡要描述一下其工作過程:
大家都知道,地球上任何人都有自己獨一無二的指紋,這常常成為公安機關鑒別罪犯身份最值得信賴的方法;與之類似,md5就可以為任何文件(不管其大小、格式、數量)產生一個同樣獨一無二的「數字指紋」,如果任何人對文件做了任何改動,其md5值也就是對應的「數字指紋」都會發生變化。
我們常常在某些軟體下載站點的某軟體信息中看到其md5值,它的作用就在於我們可以在下載該軟體後,對下載回來的文件用專門的軟體(如windows md5 check等)做一次md5校驗,以確保我們獲得的文件與該站點提供的文件為同一文件。利用md5演算法來進行文件校驗的方案被大量應用到軟體下載站、論壇資料庫、系統文件安全等方面。
md5的典型應用是對一段message(位元組串)產生fingerprint(指紋),以防止被「篡改」。舉個例子,你將一段話寫在一個叫 readme.txt文件中,並對這個readme.txt產生一個md5的值並記錄在案,然後你可以傳播這個文件給別人,別人如果修改了文件中的任何內容,你對這個文件重新計算md5時就會發現(兩個md5值不相同)。如果再有一個第三方的認證機構,用md5還可以防止文件作者的「抵賴」,這就是所謂的數字簽名應用。
所以,要遇到了md5密碼的問題,比較好的辦法是:你可以用這個系統中的md5()函數重新設一個密碼,如admin,把生成的一串密碼覆蓋原來的就行了。
md5還廣泛用於操作系統的登陸認證上,如unix、各類bsd系統登錄密碼、數字簽名等諸多方。如在unix系統中用戶的密碼是以md5(或其它類似的演算法)經hash運算後存儲在文件系統中。當用戶登錄的時候,系統把用戶輸入的密碼進行md5 hash運算,然後再去和保存在文件系統中的md5值進行比較,進而確定輸入的密碼是否正確。通過這樣的步驟,系統在並不知道用戶密碼的明碼的情況下就可以確定用戶登錄系統的合法性。這可以避免用戶的密碼被具有系統管理員許可權的用戶知道。md5將任意長度的「位元組串」映射為一個128bit的大整數,並且是通過該128bit反推原始字元串是困難的,換句話說就是,即使你看到源程序和演算法描述,也無法將一個md5的值變換回原始的字元串,從數學原理上說,是因為原始的字元串有無窮多個,這有點象不存在反函數的數學函數。所以,要遇到了md5密碼的問題,比較好的辦法是:你可以用這個系統中的md5()函數重新設一個密碼,如admin,把生成的一串密碼的hash值覆蓋原來的hash值就行了。
正是因為這個原因,現在被黑客使用最多的一種破譯密碼的方法就是一種被稱為"跑字典"的方法。有兩種方法得到字典,一種是日常搜集的用做密碼的字元串表,另一種是用排列組合方法生成的,先用md5程序計算出這些字典項的md5值,然後再用目標的md5值在這個字典中檢索。我們假設密碼的最大長度為8位位元組(8 bytes),同時密碼只能是字母和數字,共26 26 10=62個字元,排列組合出的字典的項數則是p(62,1) p(62,2)…. p(62,8),那也已經是一個很天文的數字了,存儲這個字典就需要tb級的磁碟陣列,而且這種方法還有一個前提,就是能獲得目標賬戶的密碼md5值的情況下才可以。這種加密技術被廣泛的應用於unix系統中,這也是為什麼unix系統比一般操作系統更為堅固一個重要原因。
③ 密文是什麼 具體給我講解一下
密文是相對於明文說的,明文其實就是你要傳達的消息,而明文通過加密之後就成了密文,密文其實是信息安全的一個詞彙。幫你介紹一下。
信息安全的發展歷史
通信保密科學的誕生
古羅馬帝國時期的caesar密碼:能夠將明文信息變換為人們看不懂的字元串,(密文),當密文傳到夥伴手中時,又可方便的還原為原來的明文形式。 caesar密碼由明文字母循環移3位得到。
1568年,l.battista發明了多表代替密碼,並在美國南北戰爭期間有聯軍使用。例:vigenere密碼和beaufort密碼
1854年,playfair發明了多字母代替密碼,英國在第一次世界大戰中使用了此密碼。例:hill密碼,多表、多字母代替密碼成為古典密碼學的主流。
密碼破譯技術(密碼分析)的發展:例:以1918年w.friedman使用重合指數破譯多表代替密碼技術為里程碑。 1949年c.shannon的《保密系統的通信理論》文章發表在貝爾系統技術雜志上。這兩個成果為密碼學的科學研究奠定了基礎。從藝術變為科學。實際上,這就是通信保密科學的誕生,其中密碼是核心技術。
公鑰密碼學革命
25年之後,20世紀70年代,ibm公司的des(美國數據加密標准)和1976年diffie-hellman,提出了公開密鑰密碼思想,1977年公鑰密碼演算法rsa的提出為密碼學的發展注入了新的活力。
公鑰密碼掀起了一場革命,對信息安全有三方面的貢獻:首次從計算復雜性上刻畫了密碼演算法的強度,突破了shannon僅關心理論強度的局限性;他將傳統密碼演算法中兩個密鑰管理中的保密性要求,轉換為保護其中一格的保密性及另一格的完整性的要求;它將傳統密碼演算法中密鑰歸屬從通信兩方變為一個單獨的用戶,從而使密鑰的管理復雜度有了較大下降。
公鑰密碼的提出,注意:一是密碼學的研究逐步超越了數據的通信保密范圍,開展了對數據的完整性、數字簽名等技術的研究;二是隨著計算機和網路的發展,密碼學一逐步成為計算機安全、網路安全的重要支柱,使得數據安全成為信息安全的全新內容,超越了以往物理安全占據計算機安全的主導地位狀態。
訪問控制技術與可信計算機評估准則
1969年,b.lampson提出了訪問控制模型。
1973年,d.bell 和l.lapala,創立了一種模擬軍事安全策略的計算機操作模型,這是最早也是最常用的一種計算機多級安全模型。
1985年,美國國防部在bell-lapala模型的基礎上提出了可信計算機評估准則(通常稱為橘皮書)。按照計算機系統的安全防護能力,分成8個等級。
1987年,clark-wilson模型針對完整性保護和商業應用提出的。
信息保障
1998年10月,美國國家安全局(nsa)頒布了信息保障技術框架1.1版,2003年2月6日,美國國防部(dod)頒布了信息保障實施命令8500.2,從而信息保障成為美國國防組織實施信息化作戰的既定指導思想。
信息保障(ia:information assurance):通過確保信息的可用性、完整性、可識別性、保密性和抵賴性來保護信息系統,同時引入保護、檢測及響應能力,為信息系統提供恢復功能。這就是信息保障模型pdrr。
protect保護、detect檢測、react響應、restore 恢復
美國信息保障技術框架的推進使人們意識到對信息安全的認識不要停留在保護的框架之下,同時還需要注意信息系統的檢測和響應能力。
2003年,中國發布了《國家信息領導小組關於信息安全保障工作的意見》,這是國家將信息安全提到戰略高度的指導性文件
信息保密技術的研究成果:
發展各種密碼演算法及其應用:
des(數據加密標准)、rsa(公開密鑰體制)、ecc(橢圓曲線離散對數密碼體制)等。
計算機信息系統安全模型和安全評價准則:
訪問監視器模型、多級安全模型等;tcsec(可信計算機系統評價准則)、itsec(信息技術安全評價准則)等。
加密(encryption)
加密是通過對信息的重新組合,使得只有收發雙方才能解碼並還原信息的一種手段。
傳統的加密系統是以密鑰為基礎的,這是一種對稱加密,也就是說,用戶使用同一個密鑰加密和解密。
目前,隨著技術的進步,加密正逐步被集成到系統和網路中,如ietf正在發展的下一代網際協議ipv6。硬體方面,intel公司也在研製用於pc機和伺服器主板的加密協處理器。
身份認證(authentication)
防火牆是系統的第一道防線,用以防止非法數據的侵入,而安全檢查的作用則是阻止非法用戶。有多種方法來鑒別一個用戶的合法性,密碼是最常用的,但由於有許多用戶採用了很容易被猜到的單詞或短語作為密碼,使得該方法經常失效。其它方法包括對人體生理特徵(如指紋)的識別,智能ic卡和usb盤。
數字簽名(digital signature)
數字簽名可以用來證明消息確實是由發送者簽發的,而且,當數字簽名用於存儲的數據或程序時,可以用來驗證數據或程序的完整性。
美國政府採用的數字簽名標准(digital signature standard,dss)使用了安全哈希運演算法則。用該演算法對被處理信息進行計算,可得到一個160位(bit)的數字串,把這個數字串與信息的密鑰以某種方式組合起來,從而得到數字簽名。
內容檢查(content inspection)
即使有了防火牆、身份認證和加密,人們仍擔心遭到病毒的攻擊。有些病毒通過e-mail或用戶下載的activex和java小程序(applet)進行傳播,帶病毒的applet被激活後,又可能會自動下載別的applet。現有的反病毒軟體可以清除e-mail病毒,對付新型java和activex病毒也有一些辦法,如完善防火牆,使之能監控applet的運行,或者給applet加上標簽,讓用戶知道他們的來源。
介紹一些加密的知識
密鑰加/解密系統模型
在1976年,diffie及hellman發表其論文「new directions in cryptography」[9]之前,所謂的密碼學就是指對稱密鑰密碼系統。因為加/解密用的是同一把密鑰,所以也稱為單一密鑰密碼系統。
這類演算法可謂歷史悠久,從最早的凱撒密碼到目前使用最多的des密碼演算法,都屬於單一密鑰密碼系統。
通常,一個密鑰加密系統包括以下幾個部分:
① 消息空間m(message)
② 密文空間c(ciphertext)
③ 密鑰空間k(key)
④ 加密演算法e(encryption algorithm)
⑤ 解密演算法d(decryption algorithm)
消息空間中的消息m(稱之為明文)通過由加密密鑰k1控制的加密演算法加密後得到密文c。密文c通過解密密鑰k2控制的解密演算法又可恢復出原始明文m。即:
ek1(m)=c
dk2(c)=m
dk2(ek1(m))=m
概念:
當演算法的加密密鑰能夠從解密密鑰中推算出來,或反之,解密密鑰可以從加密密鑰中推算出來時,稱此演算法為對稱演算法,也稱秘密密鑰演算法或單密鑰演算法;
當加密密鑰和解密密鑰不同並且其中一個密鑰不能通過另一個密鑰推算出來時,稱此演算法為公開密鑰演算法。
1.凱撒密碼變換
更一般化的移位替代密碼變換為
加密:e(m)=(m k) mod 26
解密:d(c)=(c-k) mod 26
2.置換密碼
在置換密碼中,明文和密文的字母保持相同,但順序被打亂了。在簡單的縱行置換密碼中,明文以固定的寬度水平地寫在一張圖表紙上,密文按垂直方向讀出;解密就是將密文按相同的寬度垂直地寫在圖表紙上,然後水平地讀出明文。例如:
明文:encryption is the transformation of data into some unreadable form
密文:eiffob nsodml ctraee rhmtuf yeaano pttirr trinem iaota onnod nsosa
20世紀40年代,shannon提出了一個常用的評估概念。特認為一個好的加密演算法應具有模糊性和擴散性。
模糊性:加密演算法應隱藏所有的局部模式,即,語言的任何識別字元都應變得模糊,加密法應將可能導致破解密鑰的提示性語言特徵進行隱藏;
擴散性:要求加密法將密文的不同部分進行混合,是任何字元都不在其原來的位置。
加密演算法易破解的原因是未能滿足這兩個shannon條件。
數據加密標准(des)
des演算法把64位的明文輸入塊變為64位的密文輸出塊,它所使用的密鑰也是64位,其功能是把輸入的64位數據塊按位重新組合,並把輸出分為l0、r0兩部分,每部分各長32位,經過16次迭代運算後。得到l16、r16,將此作為輸入,進行逆置換,即得到密文輸出。逆置換正好是初始置的逆運算.
具體方法 需要圖 我放不上去對不起了
可以將des演算法歸結如下:
子密鑰生成:
c[0]d[0] = pc–1(k)
for 1 <= i <= 16
{c[i] = ls[i](c[i−1])
d[i] = ls[i](d[i−1])
k[i] = pc–2(c[i]d[i])}
加密過程:
l[0]r[0] = ip(x)
for 1 <= i <= 16
{l[i] = r[i−1]
r[i] = l[i−1] xor f (r[i−1], k[i])}
c= ip−1(r[16]l[16])v
解密過程:
r[16]l[16] = ip(c)
for 1 <= i <= 16
{r[i−1] = l[i]
l[i−1] = r[i] xor f (l[i], k[i])}
x= ip−1(l[0]r[0])
des使用56位密鑰對64位的數據塊進行加密,並對64位的數據塊進行16輪編碼。與每輪編碼時,一個48位的「每輪」密鑰值由56位的完整密鑰得出來。des用軟體進行解碼需要用很長時間,而用硬體解碼速度非常快,但幸運的是當時大多數黑客並沒有足夠的設備製造出這種硬體設備。
在1977年,人們估計要耗資兩千萬美元才能建成一個專門計算機用於des的解密,而且需要12個小時的破解才能得到結果。所以,當時des被認為是一種十分強壯的加密方法。 但是,當今的計算機速度越來越快了,製造一台這樣特殊的機器的花費已經降到了十萬美元左右,所以用它來保護十億美元的銀行間線纜時,就會仔細考慮了。另一個方面,如果只用它來保護一台伺服器,那麼des確實是一種好的辦法,因為黑客絕不會僅僅為入侵一個伺服器而花那麼多的錢破解des密文。由於現在已經能用二十萬美圓製造一台破譯des的特殊的計算機,所以現在再對要求「強壯」加密的場合已經不再適用了
des演算法的應用誤區
des演算法具有極高安全性,到目前為止,除了用窮舉搜索法對des演算法進行攻擊外,還沒有發現更有效的辦法。而56位長的密鑰的窮舉空間為256,這意味著如果一台計算機的速度是每一秒種檢測一百萬個密鑰,則它搜索完全部密鑰就需要將近2285年的時間,可見,這是難以實現的,當然,隨著科學技術的發展,當出現超高速計算機後,我們可考慮把des密鑰的長度再增長一些,以此來達到更高的保密程度。
由上述des演算法介紹我們可以看到:des演算法中只用到64位密鑰中的其中56位,而第8、16、24、......64位8個位並未參與des運算,這一點,向我們提出了一個應用上的要求,即des的安全性是基於除了8,16,24,......64位外的其餘56位的組合變化256才得以保證的。因此,在實際應用中,我們應避開使用第8,16,24,......64位作為有效數據位,而使用其它的56位作為有效數據位,才能保證des演算法安全可靠地發揮作用。如果不了解這一點,把密鑰key的8,16,24,..... .64位作為有效數據使用,將不能保證des加密數據的安全性,對運用des來達到保密作用的系統產生數據被破譯的危險,這正是des演算法在應用上的誤區,留下了被人攻擊、被人破譯的極大隱患。
a5 算 法
序列密碼簡介
序列密碼又稱流密碼,它將明文劃分成字元(如單個字母)或其編碼的基本單元(如0、1),然後將其與密鑰流作用以加密,解密時以同步產生的相同密鑰流實現。
序列密碼強度完全依賴於密鑰流產生器所產生的序列的隨機性和不可預測性,其核心問題是密鑰流生成器的設計。而保持收發兩端密鑰流的精確同步是實現可靠解密的關鍵技術。
a5演算法
a5演算法是一種序列密碼,它是歐洲gsm標准中規定的加密演算法,用於數字蜂窩行動電話的加密,加密從用戶設備到基站之間的鏈路。a5演算法包括很多種,主要為a5/1和a5/2。其中,a5/1為強加密演算法,適用於歐洲地區;a5/2為弱加密演算法,適用於歐洲以外的地區。這里將詳細討論a5/1演算法。
a5/1演算法的主要組成部分是三個長度不同的線性反饋移位寄存器(lfsr)r1、r2和r3,其長度分別為19、22和23。三個移位寄存器在時鍾的控制下進行左移,每次左移後,寄存器最低位由寄存器中的某些位異或後的位填充。各寄存器的反饋多項式為:
r1:x18 x17 x16 x13
r2:x21 x20
r3:x22 x21 x20 x7
a5演算法的輸入是64位的會話密鑰kc和22位的隨機數(幀號)。
idea
idea即國際數據加密演算法,它的原型是pes(proposed encryption standard)。對pes改進後的新演算法稱為ipes,並於1992年改名為idea(international data encryption algorithm)。
idea是一個分組長度為64位的分組密碼演算法,密鑰長度為128位,同一個演算法即可用於加密,也可用於解密。
idea的加密過程包括兩部分:
(1) 輸入的64位明文組分成四個16位子分組:x1、x2、x3和x4。四個子分組作為演算法第一輪的輸入,總共進行八輪的迭代運算,產生64位的密文輸出。
(2) 輸入的128位會話密鑰產生八輪迭代所需的52個子密鑰(八輪運算中每輪需要六個,還有四個用於輸出變換)
子密鑰產生:輸入的128位密鑰分成八個16位子密鑰(作為第一輪運算的六個和第二輪運算的前兩個密鑰);將128位密鑰循環左移25位後再得八個子密鑰(前面四個用於第二輪,後面四個用於第三輪)。這一過程一直重復,直至產生所有密鑰。
idea的解密過程和加密過程相同,只是對子密鑰的要求不同。下表給出了加密子密鑰和相應的解密子密鑰。
密鑰間滿足:
zi(r) ⊙ zi(r) −1=1 mod (216 1)
−zi(r) zi(r) =0 mod (216 1)
blowfish演算法
blowfish是bruce schneier設計的,可以免費使用。
blowfish是一個16輪的分組密碼,明文分組長度為64位,使用變長密鑰(從32位到448位)。blowfish演算法由兩部分組成:密鑰擴展和數據加密。
1. 數據加密
數據加密總共進行16輪的迭代,如圖所示。具體描述為(將明文x分成32位的兩部分:xl, xr)
for i = 1 to 16
{
xl = xl xor pi
xr = f(xl) xor xr
if
{
交換xl和xr
}
}
xr = xr xor p17
xl = xl xor p18
合並xl 和xr
其中,p陣為18個32位子密鑰p1,p2,…,p18。
解密過程和加密過程完全一樣,只是密鑰p1,p2,…,p18以逆序使用。
2. 函數f
把xl分成四個8位子分組:a, b, c 和d,分別送入四個s盒,每個s盒為8位輸入,32位輸出。四個s盒的輸出經過一定的運算組合出32位輸出,運算為
f(xl) =((s1,a s2,b mod 232) xor s3,c) s4,d mod 232
其中,si,x表示子分組x(x=a、b、c或d)經過si (i=1、2、3或4)盒的輸出。
沒有太多地方寫了,不把整個過程列上面了,就簡單介紹一下好了。
gost演算法
gost是前蘇聯設計的分組密碼演算法,為前蘇聯國家標准局所採用,標准號為:28147–89[5]。
gost的消息分組為64位,密鑰長度為256位,此外還有一些附加密鑰,採用32輪迭代。
rc5演算法
rc5是一種分組長度、密鑰長度和加密迭代輪數都可變的分組密碼體制。rc5演算法包括三部分:密鑰擴展、加密演算法和解密演算法。
pkzip演算法
pkzip加密演算法是一個一次加密一個位元組的、密鑰長度可變的序列密碼演算法,它被嵌入在pkzip數據壓縮程序中。
該演算法使用了三個32位變數key0、key1、key2和一個從key2派生出來的8位變數key3。由密鑰初始化key0、key1和key2並在加密過程中由明文更新這三個變數。pkzip序列密碼的主函數為updata_keys()。該函數根據輸入位元組(一般為明文),更新三個32位的變數並獲得key3。
重點:單向散列函數
md5 算 法
md5的全稱是message-digestalgorithm5(信息-摘要演算法),在90年代初由和rsadatasecurityinc的ronaldl.rivest開發出來,經md2、md3和md4發展而來。它的作用是讓大容量信息在用數字簽名軟體簽署私人密匙前被"壓縮"成一種保密的格式(就是把一個任意長度的位元組串變換成一定長的大整數)。不管是md2、md4還是md5,它們都需要獲得一個隨機長度的信息並產生一個128位的信息摘要。雖然這些演算法的結構或多或少有些相似,但md2的設計與md4和md5完全不同,那是因為md2是為8位機器做過設計優化的,而md4和md5卻是面向32位的電腦。
rivest在1989年開發出md2演算法。在這個演算法中,首先對信息進行數據補位,使信息的位元組長度是16的倍數。然後,以一個16位的檢驗和追加到信息末尾。並且根據這個新產生的信息計算出散列值。後來,rogier和chauvaud發現如果忽略了檢驗和將產生md2沖突。md2演算法的加密後結果是唯一的--既沒有重復。 為了加強演算法的安全性,rivest在1990年又開發出md4演算法。md4演算法同樣需要填補信息以確保信息的位元組長度加上448後能被512整除(信息位元組長度mod512=448)。然後,一個以64位二進製表示的信息的最初長度被添加進來。信息被處理成512位damg?rd/merkle迭代結構的區塊,而且每個區塊要通過三個不同步驟的處理。denboer和bosselaers以及其他人很快的發現了攻擊md4版本中第一步和第三步的漏洞。dobbertin向大家演示了如何利用一部普通的個人電腦在幾分鍾內找到md4完整版本中的沖突(這個沖突實際上是一種漏洞,它將導致對不同的內容進行加密卻可能得到相同的加密後結果)。毫無疑問,md4就此被淘汰掉了。 盡管md4演算法在安全上有個這么大的漏洞,但它對在其後才被開發出來的好幾種信息安全加密演算法的出現卻有著不可忽視的引導作用。除了md5以外,其中比較有名的還有sha-1、ripe-md以及haval等。
一年以後,即1991年,rivest開發出技術上更為趨近成熟的md5演算法。它在md4的基礎上增加了"安全-帶子"(safety-belts)的概念。雖然md5比md4稍微慢一些,但卻更為安全。這個演算法很明顯的由四個和md4設計有少許不同的步驟組成。在md5演算法中,信息-摘要的大小和填充的必要條件與md4完全相同。denboer和bosselaers曾發現md5演算法中的假沖突(pseudo-collisions),但除此之外就沒有其他被發現的加密後結果了。 vanoorschot和wiener曾經考慮過一個在散列中暴力搜尋沖突的函數(brute-forcehashfunction),而且他們猜測一個被設計專門用來搜索md5沖突的機器(這台機器在1994年的製造成本大約是一百萬美元)可以平均每24天就找到一個沖突。但單從1991年到2001年這10年間,竟沒有出現替代md5演算法的md6或被叫做其他什麼名字的新演算法這一點,我們就可以看出這個瑕疵並沒有太多的影響md5的安全性。上面所有這些都不足以成為md5的在實際應用中的問題。並且,由於md5演算法的使用不需要支付任何版權費用的,所以在一般的情況下(非絕密應用領域。但即便是應用在絕密領域內,md5也不失為一種非常優秀的中間技術),md5怎麼都應該算得上是非常安全的了。
演算法
md表示消息摘要(message digest)。md5是md4的改進版,該演算法對輸入的任意長度消息產生128位散列值(或消息摘要。md5演算法可用圖4-2表示。
對md5演算法簡要的敘述可以為:md5以512位分組來處理輸入的信息,且每一分組又被劃分為16個32位子分組,經過了一系列的處理後,演算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成一個128位散列值。
1) 附加填充位
首先填充消息,使其長度為一個比512的倍數小64位的數。填充方法:在消息後面填充一位1,然後填充所需數量的0。填充位的位數從1~512。
2) 附加長度
將原消息長度的64位表示附加在填充後的消息後面。當原消息長度大於264時,用消息長度mod 264填充。這時,消息長度恰好是512的整數倍。令m[0 1…n−1]為填充後消息的各個字(每字為32位),n是16的倍數。
3) 初始化md緩沖區
初始化用於計算消息摘要的128位緩沖區。這個緩沖區由四個32位寄存器a、b、c、d表示。寄存器的初始化值為(按低位位元組在前的順序存放):
a: 01 23 45 67
b: 89 ab cd ef
c: fe dc ba 98
d: 76 54 32 10
4) 按512位的分組處理輸入消息
這一步為md5的主循環,包括四輪,如圖4-3所示。每個循環都以當前的正在處理的512比特分組yq和128比特緩沖值abcd為輸入,然後更新緩沖內容。
四輪操作的不同之處在於每輪使用的非線性函數不同,在第一輪操作之前,首先把a、b、c、d復制到另外的變數a、b、c、d中。這四個非線性函數分別為(其輸入/輸出均為32位字):
f(x,y,z) = (xy)((~x) z)
g(x,y,z) = (xz)(y(~z))
h(x,y,z) = xyz
i(x,y,z) = y(x(~z))
其中,表示按位與;表示按位或;~表示按位反;表示按位異或。
此外,由圖4-4可知,這一步中還用到了一個有64個元素的表t[1..64],t[i]=232×abs(sin(i)),i的單位為弧度。
根據以上描述,將這一步驟的處理過程歸納如下:
for i = 0 to n/16−1 do
/* 每次循環處理16個字,即512位元組的消息分組*/
/*把第i個字塊(512位)分成16個32位子分組拷貝到x中*/
for j = 0 to 15 do
set x[j] to m[i*16 j]
end /*j 循環*/
/*把a存為aa,b存為bb,c存為cc,d存為dd*/
aa = a
bb = b
cc = c
dd = d
/* 第一輪*/
/* 令[abcd k s i]表示操作
a = b ((a f(b,c,d) x[k] t[i]) <<< s)
其中,y<</* 完成下列16個操作*/
[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]
/* 第二輪*/
/*令[abcd k s i]表示操作
a = b ((a g(b,c,d) x[k] t[i]) <<< s)*/
/*完成下列16個操作*/
[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]
/*第三輪*/
/*令[abcd k s t]表示操作
a = b ((a h(b,c,d) x[k] t[i]) <<< s)*/
/*完成以下16個操作*/
[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]
/*第四輪*/
/*令[abcd k s t]表示操作
a = b ((a i(b,c,d) x[k] t[i]) <<< s) */
/*完成以下16個操作*/
[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]
a = a aa
b = b bb
c = c cc
d = d dd
end /*i循環*/
5) 輸出
由a、b、c、d四個寄存器的輸出按低位位元組在前的順序(即以a的低位元組開始、d的高位元組結束)得到128位的消息摘要。
以上就是對md5演算法的描述。md5演算法的運算均為基本運算,比較容易實現且速度很快。
安全散列函數(sha)
演算法
sha是美國nist和nsa共同設計的安全散列演算法(secure hash algorithm),用於數字簽名標准dss(digital signature standard)。sha的修改版sha–1於1995年作為美國聯邦信息處理標准公告(fips pub 180–1)發布[2]。
④ 如何位運算實現數的逆轉
#include
int main()
{
char c = 0x95; //10010101
int i;
char res = 0;
int roundtime = sizeof(c)*8-1;
for(i = roundtime; i >= 0; i--){
if(c & (1< res |= 1<
}
for(i = roundtime; i >= 0; i--){
if(res & (1< printf("1");
}else{
printf("0");
}
}
return 0;
}
另外樓主可以將此段代碼封裝成函數 用c 可以寫成模板...
⑤ md5 是什麼文件用什麼文件打開
就是一種加密算發,用文本查看文件一般就可以打開。
md5的全稱是message-digest algorithm 5(信息-摘要演算法),在90年代初由mit laboratory for computer science和rsa data security inc的ronald l. rivest開發出來,經md2、md3和md4發展而來。
它的作用是讓大容量信息在用數字簽名軟體簽署私人密匙前被"壓縮"成一種保密的格式(就是把一個任意長度的位元組串變換成一定長的大整數)。
(5)md6演算法擴展閱讀:
應用
用於密碼管理
當我們需要保存某些密碼信息以用於身份確認時,如果直接將密碼信息以明碼方式保存在資料庫中,不使用任何保密措施,系統管理員就很容易能得到原來的密碼信息,這些信息一旦泄露, 密碼也很容易被破譯。
電子簽名
md5 演算法還可以作為一種電子簽名的方法來使用,使用 md5演算法就可以為任何文件(不管其大小、格式、數量)產生一個獨一無二的「數字指紋」,藉助這個「數字指紋」,通過檢查文件前後 md5 值是否發生了改變,就可以知道源文件是否被改動。
⑥
鍙鑳芥槸綾諱技浜巑d5鐨勫姞瀵嗙畻娉
---------------
md5鐨勫叏縐版槸message-digest algorithm 5錛堜俊鎮-鎽樿佺畻娉曪級錛屽湪90騫翠唬鍒濈敱mit laboratory for computer science鍜宺sa data security inc鐨剅onald l. rivest寮鍙戝嚭鏉ワ紝緇弇d2銆乵d3鍜宮d4鍙戝睍鑰屾潵銆傚畠鐨勪綔鐢ㄦ槸璁╁ぇ瀹歸噺淇℃伅鍦ㄧ敤鏁板瓧絳懼悕杞浠剁劇講縐佷漢瀵嗗寵鍓嶈"鍘嬬緝"鎴愪竴縐嶄繚瀵嗙殑鏍煎紡錛堝氨鏄鎶婁竴涓浠繪剰闀垮害鐨勫瓧鑺備覆鍙樻崲鎴愪竴瀹氶暱鐨勫ぇ鏁存暟錛夈備笉綆℃槸md2銆乵d4榪樻槸md5錛屽畠浠閮介渶瑕佽幏寰椾竴涓闅忔満闀垮害鐨勪俊鎮騫朵駭鐢熶竴涓128浣嶇殑淇℃伅鎽樿併傝櫧鐒惰繖浜涚畻娉曠殑緇撴瀯鎴栧氭垨灝戞湁浜涚浉浼礆紝浣唌d2鐨勮捐′笌md4鍜宮d5瀹屽叏涓嶅悓錛岄偅鏄鍥犱負md2鏄涓8浣嶆満鍣ㄥ仛榪囪捐′紭鍖栫殑錛岃宮d4鍜宮d5鍗存槸闈㈠悜32浣嶇殑鐢佃剳銆傝繖涓変釜綆楁硶鐨勬弿榪板拰c璇璦婧愪唬鐮佸湪internet rfcs 1321涓鏈夎︾粏鐨勬弿榪幫紙h p://www.ietf.org/rfc/rfc1321.txt錛夛紝榪欐槸涓浠芥渶鏉冨▉鐨勬枃妗o紝鐢眗onald l. rivest鍦1992騫8鏈堝悜ieft鎻愪氦銆
rivest鍦1989騫村紑鍙戝嚭md2綆楁硶銆傚湪榪欎釜綆楁硶涓錛岄栧厛瀵逛俊鎮榪涜屾暟鎹琛ヤ綅錛屼嬌淇℃伅鐨勫瓧鏁e巻鑺傞暱搴︽槸16鐨勫嶆暟銆傜劧鍚庯紝浠ヤ竴涓16浣嶇殑媯楠屽拰榪藉姞鍒頒俊鎮鏈灝俱傚苟涓旀牴鎹榪欎釜鏂頒駭鐢熺殑淇℃伅璁$畻鍑烘暎鍒楀箋傚悗鏉ワ紝rogier鍜宑hauvaud鍙戠幇濡傛灉蹇界暐浜嗘楠屽拰灝嗕駭鐢焟d2鍐茬獊銆俶d2綆楁硶鐨勫姞瀵嗗悗緇撴灉鏄鍞涓鐨--鏃㈡病鏈夐噸澶嶅啿鎱ф悳銆
涓轟簡鍔犲己綆楁硶鐨勫畨鍏ㄦэ紝rivest鍦1990騫村張寮鍙戝嚭md4綆楁硶銆俶d4綆楁硶鍚屾牱闇瑕佸~琛ヤ俊鎮浠ョ『淇濅俊鎮鐨勫瓧鑺傞暱搴﹀姞涓448鍚庤兘琚512鏁撮櫎錛堜俊鎮瀛楄妭闀垮害mod 512 = 448錛夈傜劧鍚庯紝涓涓浠64浣嶄簩榪涘埗琛ㄧず鐨勪俊鎮鐨勬渶鍒濋暱搴﹁娣誨姞榪涙潵銆備俊鎮琚澶勭悊鎴512浣峝amg?rd/merkle榪浠g粨鏋勭殑鍖哄潡錛岃屼笖姣忎釜鍖哄潡瑕侀氳繃涓変釜涓嶅悓姝ラょ殑澶勭悊銆俤en boer鍜宐osselaers浠ュ強鍏朵粬浜哄緢蹇鐨勫彂鐜頒簡鏀誨嚮md4鐗堟湰涓絎涓姝ュ拰絎涓夋ョ殑婕忔礊銆俤obbertin鍚戝ぇ瀹舵紨紺轟簡濡備綍鍒╃敤涓閮ㄦ櫘閫氱殑涓浜虹數鑴戝湪鍑犲垎閽熷唴鎵懼埌md4瀹屾暣鐗堟湰涓鐨勫啿紿侊紙榪欎釜鍐茬獊瀹為檯涓婃槸涓縐嶆紡媧烇紝瀹冨皢瀵艱嚧瀵逛笉鍚岀殑鍐呭硅繘琛屽姞瀵嗗嵈鍙鑳藉緱鍒扮浉鍚岀殑鍔犲瘑鍚庣粨鏋滐級銆傛鏃犵枒闂錛宮d4灝辨よ娣樻卑鎺変簡銆
灝界md4綆楁硶鍦ㄥ畨鍏ㄤ笂鏈変釜榪欎箞澶х殑婕忔礊錛屼絾瀹冨瑰湪鍏跺悗鎵嶈寮鍙戝嚭鏉ョ殑濂藉嚑縐嶄俊鎮瀹夊叏鍔犲瘑綆楁硶鐨勫嚭鐜板嵈鏈夌潃涓嶅彲蹇借嗙殑寮曞間綔鐢ㄣ傞櫎浜唌d5浠ュ栵紝鍏朵腑姣旇緝鏈夊悕鐨勮繕鏈塻ha-1銆乺ipe-md浠ュ強haval絳夈
涓騫翠互鍚庯紝鍗1991騫達紝rivest寮鍙戝嚭鎶鏈涓婃洿涓鴻秼榪戞垚鐔熺殑md5綆楁硶銆傚畠鍦╩d4鐨勫熀紜涓婂炲姞浜"瀹夊叏-甯﹀瓙"錛坰afety-belts錛夌殑姒傚康銆傝櫧鐒秏d5姣攎d4紼嶅井鎱涓浜涳紝浣嗗嵈鏇翠負瀹夊叏銆傝繖涓綆楁硶寰堟槑鏄劇殑鐢卞洓涓鍜宮d4璁捐℃湁灝戣鎬笉鍚岀殑姝ラょ粍鎴愩傚湪md5綆楁硶涓錛屼俊鎮-鎽樿佺殑澶у皬鍜屽~鍏呯殑蹇呰佹潯浠朵笌md4瀹屽叏鐩稿悓銆俤en boer鍜宐osselaers鏇懼彂鐜癿d5綆楁硶涓鐨勫亣鍐茬獊錛坧seudo-collisions錛夛紝浣嗛櫎姝や箣澶栧氨娌$ⅶ閫楁湁鍏朵粬琚鍙戠幇鐨勫姞瀵嗗悗緇撴灉浜嗐
van oorschot鍜寃iener鏇劇粡鑰冭檻榪囦竴涓鍦ㄦ暎鍒椾腑鏆村姏鎼滃誨啿紿佺殑鍑芥暟錛坆rute-force hash function錛夛紝鑰屼笖浠栦滑鐚滄祴涓涓琚璁捐′笓闂ㄧ敤鏉ユ悳緔md5鍐茬獊鐨勬満鍣錛堣繖鍙版満鍣ㄥ湪1994騫寸殑鍒墮犳垚鏈澶х害鏄涓鐧句竾緹庡厓錛夊彲浠ュ鉤鍧囨瘡24澶╁氨鎵懼埌涓涓鍐茬獊銆備絾鍗曚粠1991騫村埌2001騫磋繖10騫撮棿錛岀珶娌℃湁鍑虹幇鏇誇唬md5綆楁硶鐨刴d6鎴栬鍙鍋氬叾浠栦粈涔堝悕瀛楃殑鏂扮畻娉曡繖涓鐐癸紝鎴戜滑灝卞彲浠ョ湅鍑鴻繖涓鐟曠柕騫舵病鏈夊お澶氱殑褰卞搷md5鐨勫畨鍏ㄦс備笂闈㈡墍鏈夎繖浜涢兘涓嶈凍浠ユ垚涓簃d5鐨勫湪瀹為檯搴旂敤涓鐨勯棶棰樸傚苟涓旓紝鐢變簬md5綆楁硶鐨勪嬌鐢ㄤ笉闇瑕佹敮浠樹換浣曠増鏉冭垂鐢ㄧ殑錛屾墍浠ュ湪涓鑸鐨勬儏鍐典笅錛堥潪緇濆瘑搴旂敤棰嗗煙銆備絾鍗充究鏄搴旂敤鍦ㄧ粷瀵嗛嗗煙鍐咃紝md5涔熶笉澶變負涓縐嶉潪甯鎬紭縐鐨勪腑闂存妧鏈錛夛紝md5鎬庝箞閮藉簲璇ョ畻寰椾笂鏄闈炲父瀹夊叏鐨勪簡銆
綆楁硶鐨勫簲鐢
md5鐨勫吀鍨嬪簲鐢ㄦ槸瀵逛竴孌典俊鎮錛坢essage錛変駭鐢熶俊鎮鎽樿侊紙message-digest錛夛紝浠ラ槻姝㈣綃℃敼銆傛瘮濡傦紝鍦╱nix涓嬫湁寰堝氳蔣浠跺湪涓嬭澆鐨勬椂鍊欓兘鏈変竴涓鏂囦歡鍚嶇浉鍚岋紝鏂囦歡鎵╁睍鍚嶄負.md5鐨勬枃浠訛紝鍦ㄨ繖涓鏂囦歡涓閫氬父鍙鏈変竴琛屾枃鏈錛屽ぇ鑷寸粨鏋勫傦細
md5 (tanajiya.tar.gz) =
榪欏氨鏄痶anajiya.tar.gz鏂囦歡鐨勬暟瀛楃懼悕銆俶d5灝嗘暣涓鏂囦歡褰撲綔涓涓澶ф枃鏈淇℃伅錛岄氳繃鍏朵笉鍙閫嗙殑瀛楃︿覆鍙樻崲綆楁硶錛屼駭鐢熶簡榪欎釜鍞涓鐨刴d5淇℃伅鎽樿併傚傛灉鍦ㄤ互鍚庝紶鎾榪欎釜鏂囦歡鐨勮繃紼嬩腑錛屾棤璁烘枃浠剁殑鍐呭瑰彂鐢熶簡浠諱綍褰㈠紡鐨勬敼鍙橈紙鍖呮嫭浜轟負淇鏀規垨鑰呬笅杞借繃紼嬩腑綰胯礬涓嶇ǔ瀹氬紩璧風殑浼犺緭閿欒絳夛級錛屽彧瑕佷綘瀵硅繖涓鏂囦歡閲嶆柊璁$畻md5鏃跺氨浼氬彂鐜頒俊鎮鎽樿佷笉鐩稿悓錛岀敱姝ゅ彲浠ョ『瀹氫綘寰楀埌鐨勫彧鏄涓涓涓嶆g『鐨勬枃浠躲傚傛灉鍐嶆湁涓涓絎涓夋柟鐨勮よ瘉鏈烘瀯錛岀敤md5榪樺彲浠ラ槻姝㈡枃浠朵綔鑰呯殑"鎶佃禆"錛岃繖灝辨槸鎵璋撶殑鏁板瓧絳懼悕搴旂敤銆
md5榪樺箍娉涚敤浜庡姞瀵嗗拰瑙e瘑鎶鏈涓娿傛瘮濡傚湪unix緋葷粺涓鐢ㄦ埛鐨勫瘑鐮佸氨鏄浠md5錛堟垨鍏跺畠綾諱技鐨勭畻娉曪級緇忓姞瀵嗗悗瀛樺偍鍦ㄦ枃浠剁郴緇熶腑銆傚綋鐢ㄦ埛鐧誨綍鐨勬椂鍊欙紝緋葷粺鎶婄敤鎴瘋緭鍏ョ殑瀵嗙爜璁$畻鎴恗d5鍊礆紝鐒跺悗鍐嶅幓鍜屼繚瀛樺湪鏂囦歡緋葷粺涓鐨刴d5鍊艱繘琛屾瘮杈冿紝榪涜岀『瀹氳緭鍏ョ殑瀵嗙爜鏄鍚︽g『銆傞氳繃榪欐牱鐨勬ラわ紝緋葷粺鍦ㄥ苟涓嶇煡閬撶敤鎴峰瘑鐮佺殑鏄庣爜鐨勬儏鍐典笅灝卞彲浠ョ『瀹氱敤鎴風櫥褰曠郴緇熺殑鍚堟硶鎬с傝繖涓嶄絾鍙浠ラ伩鍏嶇敤鎴風殑瀵嗙爜琚鍏鋒湁緋葷粺綆$悊鍛樻潈闄愮殑鐢ㄦ埛鐭ラ亾錛岃屼笖榪樺湪涓瀹氱▼搴︿笂澧炲姞浜嗗瘑鐮佽鐮磋в鐨勯毦搴︺
姝f槸鍥犱負榪欎釜鍘熷洜錛岀幇鍦ㄨ榛戝浣跨敤鏈澶氱殑涓縐嶇牬璇戝瘑鐮佺殑鏂規硶灝辨槸涓縐嶈縐頒負"璺戝瓧鍏"鐨勬柟娉曘傛湁涓ょ嶆柟娉曞緱鍒板瓧鍏革紝涓縐嶆槸鏃ュ父鎼滈泦鐨勭敤鍋氬瘑鐮佺殑瀛楃︿覆琛錛屽彟涓縐嶆槸鐢ㄦ帓鍒楃粍鍚堟柟娉曠敓鎴愮殑錛屽厛鐢╩d5紼嬪簭璁$畻鍑鴻繖浜涘瓧鍏擱」鐨刴d5鍊礆紝鐒跺悗鍐嶇敤鐩鏍囩殑md5鍊煎湪榪欎釜瀛楀吀涓媯緔銆傛垜浠鍋囪懼瘑鐮佺殑鏈澶ч暱搴︿負8浣嶅瓧鑺傦紙8 bytes錛夛紝鍚屾椂瀵嗙爜鍙鑳芥槸瀛楁瘝鍜屾暟瀛楋紝鍏26 26 10=62涓瀛楃︼紝鎺掑垪緇勫悎鍑虹殑瀛楀吀鐨勯」鏁板垯鏄痯(62,1) p(62,2)鈥. p(62,8)錛岄偅涔熷凡緇忔槸涓涓寰堝ぉ鏂囩殑鏁板瓧浜嗭紝瀛樺偍榪欎釜瀛楀吀灝遍渶瑕乼b綰х殑紓佺洏闃靛垪錛岃屼笖榪欑嶆柟娉曡繕鏈変竴涓鍓嶆彁錛屽氨鏄鑳借幏寰楃洰鏍囪處鎴風殑瀵嗙爜md5鍊肩殑鎯呭喌涓嬫墠鍙浠ャ傝繖縐嶅姞瀵嗘妧鏈琚騫挎硾鐨勫簲鐢ㄤ簬unix緋葷粺涓錛岃繖涔熸槸涓轟粈涔坲nix緋葷粺姣斾竴鑸鎿嶄綔緋葷粺鏇翠負鍧氬滻涓涓閲嶈佸師鍥犮
綆楁硶鎻忚堪
瀵筸d5綆楁硶綆瑕佺殑鍙欒堪鍙浠ヤ負錛歮d5浠512浣嶅垎緇勬潵澶勭悊杈撳叆鐨勪俊鎮錛屼笖姣忎竴鍒嗙粍鍙堣鍒掑垎涓16涓32浣嶅瓙鍒嗙粍錛岀粡榪囦簡涓緋誨垪鐨勫勭悊鍚庯紝綆楁硶鐨勮緭鍑虹敱鍥涗釜32浣嶅垎緇勭粍鎴愶紝灝嗚繖鍥涗釜32浣嶅垎緇勭駭鑱斿悗灝嗙敓鎴愪竴涓128浣嶆暎鍒楀箋
鍦╩d5綆楁硶涓錛岄栧厛闇瑕佸逛俊鎮榪涜屽~鍏咃紝浣垮叾瀛楄妭闀垮害瀵512奼備綑鐨勭粨鏋滅瓑浜448銆傚洜姝わ紝淇℃伅鐨勫瓧鑺傞暱搴︼紙bits length錛夊皢琚鎵╁睍鑷硜*512 448錛屽嵆n*64 56涓瀛楄妭錛坆ytes錛夛紝n涓轟竴涓姝f暣鏁般傚~鍏呯殑鏂規硶濡備笅錛屽湪淇℃伅鐨勫悗闈㈠~鍏呬竴涓1鍜屾棤鏁頒釜0錛岀洿鍒版弧瓚充笂闈㈢殑鏉′歡鏃舵墠鍋滄㈢敤0瀵逛俊鎮鐨勫~鍏呫傜劧鍚庯紝鍦ㄥ湪榪欎釜緇撴灉鍚庨潰闄勫姞涓涓浠64浣嶄簩榪涘埗琛ㄧず鐨勫~鍏呭墠淇℃伅闀垮害銆傜粡榪囪繖涓ゆョ殑澶勭悊錛岀幇鍦ㄧ殑淇℃伅瀛楄妭闀垮害=n*512 448 64=(n 1)*512錛屽嵆闀垮害鎮板ソ鏄512鐨勬暣鏁板嶃傝繖鏍峰仛鐨勫師鍥犳槸涓烘弧瓚沖悗闈㈠勭悊涓瀵逛俊鎮闀垮害鐨勮佹眰銆
md5涓鏈夊洓涓32浣嶈縐頒綔閾炬帴鍙橀噺錛坈haining variable錛夌殑鏁存暟鍙傛暟錛屼粬浠鍒嗗埆涓猴細a=0x01234567錛宐=0x89abcdef錛宑=0xfedcba98錛宒=0x76543210銆
褰撹劇疆濂借繖鍥涗釜閾炬帴鍙橀噺鍚庯紝灝卞紑濮嬭繘鍏ョ畻娉曠殑鍥涜疆寰鐜榪愮畻銆傚驚鐜鐨勬℃暟鏄淇℃伅涓512浣嶄俊鎮鍒嗙粍鐨勬暟鐩銆
灝嗕笂闈㈠洓涓閾炬帴鍙橀噺澶嶅埗鍒板彟澶栧洓涓鍙橀噺涓錛歛鍒癮錛宐鍒癰錛宑鍒癱錛宒鍒癲銆
涓誨驚鐜鏈夊洓杞錛坢d4鍙鏈変笁杞錛夛紝姣忚疆寰鐜閮藉緢鐩鎬技銆傜涓杞榪涜16嬈℃搷浣溿傛瘡嬈℃搷浣滃筧銆乥銆乧鍜宒涓鐨勫叾涓涓変釜浣滀竴嬈¢潪綰挎у嚱鏁拌繍綆楋紝鐒跺悗灝嗘墍寰楃粨鏋滃姞涓婄鍥涗釜鍙橀噺錛屾枃鏈鐨勪竴涓瀛愬垎緇勫拰涓涓甯告暟銆傚啀灝嗘墍寰楃粨鏋滃悜鍙崇幆縐諱竴涓涓嶅畾鐨勬暟錛屽苟鍔犱笂a銆乥銆乧鎴杁涓涔嬩竴銆傛渶鍚庣敤璇ョ粨鏋滃彇浠a銆乥銆乧鎴杁涓涔嬩竴銆
浠ヤ竴涓嬫槸姣忔℃搷浣滀腑鐢ㄥ埌鐨勫洓涓闈炵嚎鎬у嚱鏁幫紙姣忚疆涓涓錛夈
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銆亂鍜寊鐨勫瑰簲浣嶆槸鐙絝嬪拰鍧囧寑鐨勶紝閭d箞緇撴灉鐨勬瘡涓浣嶄篃搴旀槸鐙絝嬪拰鍧囧寑鐨勩
f鏄涓涓閫愪綅榪愮畻鐨勫嚱鏁般傚嵆錛屽傛灉x錛岄偅涔坹錛屽惁鍒檢銆傚嚱鏁癶鏄閫愪綅濂囧伓鎿嶄綔絎︺
鍋囪緈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鏄4294967296*abs(sin(i))鐨勬暣鏁伴儴鍒嗭紝i鐨勫崟浣嶆槸寮у害銆(4294967296絳変簬2鐨32嬈℃柟)
鎵鏈夎繖浜涘畬鎴愪箣鍚庯紝灝哸銆乥銆乧銆乨鍒嗗埆鍔犱笂a銆乥銆乧銆乨銆傜劧鍚庣敤涓嬩竴鍒嗙粍鏁版嵁緇х畫榪愯岀畻娉曪紝鏈鍚庣殑杈撳嚭鏄痑銆乥銆乧鍜宒鐨勭駭鑱斻
褰撲綘鎸夌収鎴戜笂闈㈡墍璇寸殑鏂規硶瀹炵幇md5綆楁硶浠ュ悗錛屼綘鍙浠ョ敤浠ヤ笅鍑犱釜淇℃伅瀵逛綘鍋氬嚭鏉ョ殑紼嬪簭浣滀竴涓綆鍗曠殑嫻嬭瘯錛岀湅鐪嬬▼搴忔湁娌℃湁閿欒銆
md5 ("") =
md5 ("a") =
md5 ("abc") =
md5 ("message digest") =
md5 ("abcdefghijklmnopqrstuvwxyz") =
md5 ("") =
md5 ("
01234567890") =
濡傛灉浣犵敤涓婇潰鐨勪俊鎮鍒嗗埆瀵逛綘鍋氱殑md5綆楁硶瀹炰緥鍋氭祴璇曪紝鏈鍚庡緱鍑虹殑緇撹哄拰鏍囧噯絳旀堝畬鍏ㄤ竴鏍鳳紝閭f垜灝辮佸湪榪欓噷璞′綘閬撲竴澹扮濊春浜嗐傝佺煡閬擄紝鎴戠殑紼嬪簭鍦ㄧ涓嬈$紪璇戞垚鍔熺殑鏃跺欐槸娌℃湁寰楀嚭鍜屼笂闈㈢浉鍚岀殑緇撴灉鐨勩
md5鐨勫畨鍏ㄦ
md5鐩稿筸d4鎵浣滅殑鏀硅繘錛
1. 澧炲姞浜嗙鍥涜疆錛
2. 姣忎竴姝ュ潎鏈夊敮涓鐨勫姞娉曞父鏁幫紱
3. 涓哄噺寮辯浜岃疆涓鍑芥暟g鐨勫圭о鎬т粠(x&y)|(x&z)|(y&z)鍙樹負(x&z)|(y&(~z))錛
4. 絎涓姝ュ姞涓婁簡涓婁竴姝ョ殑緇撴灉錛岃繖灝嗗紩璧鋒洿蹇鐨勯洩宕╂晥搴旓紱
5. 鏀瑰彉浜嗙浜岃疆鍜岀涓夎疆涓璁塊棶娑堟伅瀛愬垎緇勭殑嬈″簭錛屼嬌鍏舵洿涓嶇浉浼礆紱
6. 榪戜技浼樺寲浜嗘瘡涓杞涓鐨勫驚鐜宸︾щ浣嶇щ閲忎互瀹炵幇鏇村揩鐨勯洩宕╂晥搴斻傚悇杞鐨勪綅縐婚噺浜掍笉鐩稿悓銆
[color=red]綆鍗曠殑璇達細
md5鍙淇℃伅錛嶆憳瑕佺畻娉曪紝鏄涓縐嶅瘑鐮佺殑綆楁硶錛屽畠鍙浠ュ逛換浣曟枃浠朵駭鐢熶竴涓鍞涓鐨凪d5楠岃瘉鐮侊紝姣忎釜鏂囦歡鐨凪d5鐮佸氨濡傚悓姣忎釜浜虹殑鎸囩汗涓鏍鳳紝閮芥槸涓嶅悓鐨勶紝榪欐牱錛屼竴鏃﹁繖涓鏂囦歡鍦ㄤ紶杈撹繃紼嬩腑錛屽叾鍐呭硅鎹熷潖鎴栬呰淇鏀圭殑璇濓紝閭d箞榪欎釜鏂囦歡鐨凪d5鐮佸氨浼氬彂鐢熷彉鍖栵紝閫氳繃瀵規枃浠禡d5鐨勯獙璇侊紝鍙浠ュ緱鐭ヨ幏寰楃殑鏂囦歡鏄鍚﹀畬鏁淬