#import <CommonCrypto/CommonDigest.h>
這是一個系統的C/C++共享庫- (NSString *)md5:(NSString *)str{ // 轉化成utf-8 const char *cStr=[str UTF8String]; // 開闢一個16字節(128位:MD5加密出來就是128位/bit(字節),1字節=8位)的空間 unsigned char result[16]; // 加密存儲到result中,將cStr字符串轉換成了32位,通常來講,此過程不可逆,即只能加密,不能解密 CC_MD5(cStr, strlen(cStr), result); // 其中%02x是格式控制符:‘x’表示以16進制輸出,‘02’表示不足兩位,前面補0 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]]; // md5加密另外一種寫法:利用for循環輸出 - (NSString *)md5:(NSString *)str{ // 轉化成utf-8 const char *cStr=[str UTF8String]; // 開闢一個16字節(128位:MD5加密出來就是128位/bit(字節),1字節=8位)的空間 unsigned char result[16]; // 加密存儲到result中,將cStr字符串轉換成了32位 CC_MD5(cStr, strlen(cStr), result); // 其中%02x是格式控制符:‘x’表示以16進制輸出,‘02’表示不足兩位,前面補0 NSMutableString *mStr=[NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH]; for (int i=0; i<CC_MD5_DIGEST_LENGTH; i++) { [mStr appendFormat:@"%02X",result[i]]; } return mStr; // sha1加密 - (NSString *)sha1:(NSString *)str{ const char *cStr=[str cStringUsingEncoding:NSUTF8StringEncoding]; NSData *data=[NSData dataWithBytes:cStr length:str.length]; uint8_t disgest[CC_SHA1_DIGEST_LENGTH]; CC_SHA1(data.bytes, data.length, disgest); NSMutableString *output=[NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH*2]; for (int i=0; i<CC_SHA1_DIGEST_LENGTH; i++) { [output appendFormat:@"%02x",disgest[i]]; } return output; }
viewDidLoad方法中,算法
- (void)viewDidLoad { [super viewDidLoad]; // 假設對1進行加密,內容可自選 NSString *string=@"1"; // md5加密 NSString *str = [self md5:string]; // 打印 NSLog(@"str=%@",str); // sha1加密 NSString *str1=[self sha1:string]; // 打印 NSLog(@"str1=%@",str1); }
打印結果以下:編程