+(NSString*)md5String:(NSString*)sourceString{
? ? if(!sourceString){
? ? ? ? return nil;//判斷sourceString如果為空則直接返回nil。
? ? }
? ? //MD5加密都是通過C級別的函數來計算,所以需要將加密的字符串轉換為C語言的字符串
? ? constchar*cString = sourceString.UTF8String;
? ? //創建一個C語言的字符數組,用來接收加密結束之后的字符
? ? unsigned char result[CC_MD5_DIGEST_LENGTH];
? ? //MD5計算(也就是加密)
? ? //第一個參數:需要加密的字符串
? ? //第二個參數:需要加密的字符串的長度
? ? //第三個參數:加密完成之后的字符串存儲的地方
? ? CC_MD5(cString, (CC_LONG)strlen(cString), result);
? ? //將加密完成的字符拼接起來使用(16進制的)。
? ? //聲明一個可變字符串類型,用來拼接轉換好的字符
? ? NSMutableString *resultString = [[NSMutableString alloc]init];
? ? //遍歷所有的result數組,取出所有的字符來拼接
? ? for (int i = 0;i < CC_MD5_DIGEST_LENGTH; i++) {
? ? ? ? [resultString? appendFormat:@"%02x",result[i]];
? ? ? ? //%02x:x 表示以十六進制形式輸出,02 表示不足兩位,前面補0輸出;超出兩位,不影響。當x小寫的時候,返回的密文中的字母就是小寫的,當X大寫的時候返回的密文中的字母是大寫的。
? ? }
? ? //打印最終需要的字符
? ? NSLog(@"resultString === %@",resultString);
? ? returnresultString;
}