你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> ios 關於MD5 加密的32位與16位

ios 關於MD5 加密的32位與16位

編輯:關於IOS

在IOS開發過程中,為了保證數據的安全,我們通常要采取一些加密方法,常見的加密有Base64加密和MD5加密。Base64加密是可逆的,MD5加密目前來說一般是不可逆的。我們在開發一款App過程中,對於發的請求,其中有個“sign”的字段,這個key對應的value是MD5加密的字段,旁邊的安卓同事問php後台,說MD5加密是32位的還是16位的,由於以前未曾注意過,所以就搜索了下,現在稍微總結下:

  MD5即Message-Digest Algorithm 5(信息-摘要算法5),用於確保信息傳輸完整一致。是計算機廣泛使用的雜湊算法之一(又譯摘要算法、哈希算法),主流編程語言普遍已有MD5實現。MD5的作用是讓大容量信息在用數字簽名軟件簽署私人密鑰前被"壓縮"成一種保密的格式(就是把一個任意長度的字節串變換成一定長的十六進制數字串)。(引用自百度百科)   注意生成“一定長”,這個“一定長”到底是多長呢!看了好多資料,包括維基百科和一些論壇,說MD5其實進過算法產生的是固定的128bit,即128個0和1的二進制位,而在實際應用開發中,通常是以16進制輸出的,所以正好就是32位的16進制,說白了也就是32個16進制的數字。   ios MD5加密的方法如下   復制代碼 #import <CommonCrypto/CommonDigest.h>   - (NSString *)md5:(NSString *)str {     const char *cStr = [str UTF8String];     unsigned char result[16];     CC_MD5(cStr, strlen(cStr), result); // This is the md5 call     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]         ];  } 復制代碼 其中%02x是格式控制符:‘x’表示以16進制輸出,‘02’表示不足兩位,前面補0;如‘f’輸出為0f,‘1f3’則輸出1f3;本來一般的都會介紹到這裡就完了,我想多介紹一下代碼中result是個字符數組,那為什麼是[16]呢,這是因為MD5算法最後生成的是128位,而在計算機的最小存儲單位為字節,1個字節是8位,對應一個char類型,計算可得需要16個char。所以result是[16]。那麼為什麼輸出的格式一定是%02x呢,而不是其它呢。這也是有原因的:因為約定MD5一般是以16進制的格式輸出,那麼其實這個問題就轉換為把128個0和1以16進制來表示,每4位二進制對應一個16進制的元素,則需要32個16進制的元素,如果元素全部為0,放到char的數組中,正常是不會輸出,如00001111,以%x輸出,則是f,那麼就會丟失0;但如果以%02x表示則輸出結果是0f,正好是轉換的正確結果。   所以以上就是char[16]和%02x的來歷。   至於人們說的16位MD5加密,其實是這樣的:舉例如果產生的MD5加密字符串是:01234567abcdefababcdefab76543210,則16位的MD加密字符是abcdefababcdefab,也就是只是截取了中間的16位。實際上這個操作已經不是MD5加密算法所包括的,而應當是對MD5加密算法結果的二次處理。其它的64位和大小寫什麼的,都屬於對MD5算法結果的二次處理。因為MD5算法產生的結果就是128bit,128個二進制數字。   以上就是我對MD5關於16位和32位的一些簡單理解,呵呵。
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved