iOS MD5加密,iosmd5加密

來源:互聯網
上載者:User

iOS MD5加密,iosmd5加密

1.MD5加密

Message Digest Algorithm MD5(中文名為訊息摘要演算法第五版)為電腦安全領域廣泛使用的一種散列函數,用以提供訊息的完整性保護。該演算法的檔案號為RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992)

 

2.MD5加密作用

一致性驗證

MD5的典型應用是對一段資訊(Message)產生資訊摘要(Message-Digest),以防止被篡改。比如,在Unix下有很多軟體在下載的時候都有一個檔案名稱相同,副檔名為.md5的檔案,在這個檔案中通常只有一行文本,大致結構如:

MD5 (tanajiya.tar.gz) = 0ca175b9c0f726a831d895e269332461

這就是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還廣泛用於作業系統的登陸認證上,如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系統比一般作業系統更為堅固一個重要原因。 3.iOS中實現MD5(1)MD5加密字串

將字串進行MD5加密,返回加密後的字串。 

#import <CommonCrypto/CommonDigest.h> // Need to import for CC_MD5 access
- (NSString *)md5:(NSString *)str{    const char *cStr = [str UTF8String];    unsigned char result[16];    CC_MD5(cStr, strlen(cStr), result); // This is the md5 call
//輸出1// return [NSString stringWithFormat:// @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",// result[0], result[1], result[2], result[3], // result[4], result[5], result[6], result[7],// result[8], result[9], result[10], result[11],// result[12], result[13], result[14], result[15]// ];

//輸出2 簡化版
    NSMutableString *ret = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH];
    
    for(int i = 0; i<CC_MD5_DIGEST_LENGTH; i++) {
        [ret appendFormat:@"%02X",result];
    }    
    return ret;
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.