iOS MD5 (消息摘要算法5)
生活随笔
收集整理的這篇文章主要介紹了
iOS MD5 (消息摘要算法5)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、MD5定義 ? ? MD5即Message-Digest Algorithm 5(消息-摘要算法5),為計算機安全領域廣泛使用的一種散列函數,用以提供消息的完整性保護(又譯摘要算法、哈希算法),主流編程語言普遍已有MD5實現。將數據運算為另一固定長度值,是雜湊算法的基礎原理,MD5的前身有MD2、MD3和MD4。 也有說法MD5不是加密算法, 因為如果目的是加密,必須滿足的一個條件是加密過后可以解密。但是MD5是無法從結果還原出原始數據的。 二、MD5特點 1、壓縮性:任意長度的數據,算出的MD5值長度都是固定的。 2、容易計算:從原數據計算出MD5值很容易。 3、抗修改性:對原數據進行任何改動,哪怕只修改1個字節,所得到的MD5值都有很大區別。 4、弱抗碰撞:已知原數據和其MD5值,想找到一個具有相同MD5值的數據(即偽造數據)是非常困難的。 5、強抗碰撞:想找到兩個不同的數據,使它們具有相同的MD5值,是非常困難的。 6、MD5加密是不可解密的,但是網上有一些解析MD5的,那個相當于一個大型的數據庫,通過匹配MD5去找到原密碼。所以,只要在要加密的字符串前面加上一些字母數字符號或者多次MD5加密,這樣出來的結果一般是解析不出來的。 三、MD5好處 1、壓縮到固定長度128bit,長度小適合互聯網傳輸; 2、相同文件多次壓縮的值不變,常用于對文件的是否被篡改的校驗; 3、不同文件壓縮后出現值沖突的幾率很小; 4、md5算法比同類的sha-1計算速度快; 四、MD5應用 1、一致性驗證:MD5的典型應用是對一段信息(Message)產生信息摘要(Message-Digest),以防止被篡改。MD5就可以為任何文件(不管其大小、格式、數量)產生一個同樣獨一無二的“數字指紋”,如果任何人對文件做了任何改動,其MD5值也就是對應的“數字指紋”都會發生變化。 2、數字簽名:MD5的典型應用是對一段Message(字節串)產生fingerprint(指紋),以防止被“篡改”。舉個例子,你將一段話寫在一個叫 readme.txt文件中,并對這個readme.txt產生一個MD5的值并記錄在案,然后你可以傳播這個文件給別人,別人如果修改了文件中的任何內容,你對這個文件重新計算MD5時就會發現(兩個MD5值不相同)。如果再有一個第三方的認證機構,用MD5還可以防止文件作者的“抵賴”,這就是所謂的數字簽名應用。 3、安全訪問認證:MD5還廣泛用于操作系統的登陸認證上,如Unix、各類BSD系統登錄密碼、數字簽名等諸多方面。如在Unix系統中用戶的密碼是以MD5(或其它類似的算法)經Hash運算后存儲在文件系統中。當用戶登錄的時候,系統把用戶輸入的密碼進行MD5 Hash運算,然后再去和保存在文件系統中的MD5值進行比較,進而確定輸入的密碼是否正確。通過這樣的步驟,系統在并不知道用戶密碼的明碼的情況下就可以確定用戶登錄系統的合法性。這可以避免用戶的密碼被具有系統管理員權限的用戶知道。 移動端多用于 1、本地數據加密:對NSUserDefaults,qlite,存儲文件數據加密,保護帳號和關鍵信息。 2、URL編碼加密:對程序中出現的URL進行編碼加密,防止URL被靜態分析 3、網絡傳輸數據加密:對客戶端傳輸數據提供加密方案,有效防止通過網絡接口的攔截獲取 4、方法體,方法名高級混淆:對應用程序的方法名和方法體進行混淆,保證源碼被逆向后無法解析代碼 5、程序結構混排加密:對應用程序邏輯結構進行打亂混排,保證源碼可讀性降到最低 code: - (NSString *)md5String {const char *str = self.UTF8String; // 轉為utf-8uint8_t buffer[CC_MD5_DIGEST_LENGTH]; //開辟一個16字節(128位:md5加密出來就是128位/bit)的空間(一個字節=8字位=8個二進制數)// 把str字符串轉換成了32位的16進制數列(這個過程不可逆轉) 存儲到了result這個空間中CC_MD5(str, (CC_LONG)strlen(str), buffer);NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {[output appendFormat:@"%02x", buffer[i]];}return output;
}
?
使用: 對于需要加密的內容可以進行多次MD5加密或者加鹽,增加安全性。 NSString *pwd = @"123457"; NSString *md5Str = [pwd md5String]; NSLog(@"%@", md5Str);// 多次加密 NSString *md5Str2 = [[pwd md5String] md5String];// 加鹽 NSString *md5Str2 = [[NSString stringWithFormat:@"ww%@ee123", pwd] md5String]; 可能會有人遇到過ios客戶端和服務器端匹配MD5值會有不一樣的,可能是某一方求MD5值少做一步,或者大小寫位數沒有約定好。?
參考:http://baike.baidu.com/link?url=FII-wKl06KB_vzlHR7DdIyyXXYvhHIMnmn_jsF9kAtEXBOFVAW3rBnBwsLESHpawoHDp7r8WLXDhlqBvdNK_Wa轉載于:https://www.cnblogs.com/10-19-92/p/6750280.html
總結
以上是生活随笔為你收集整理的iOS MD5 (消息摘要算法5)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ROS获取KinectV2相机的彩色图和
- 下一篇: 正点原子STM32F103 DMA代码例