iOS开发之Objective-c的MD5/SHA1加密算法的实现

来源:互联网 发布:淘宝双十二报名入口 编辑:程序博客网 时间:2024/03/29 08:39
  1. Objective-c实现MD5和SHA1算法相对还是比较简单的,可以直接调用系统的C/C++共享库来实现调用  
  2. MD5即Message Digest Algorithm 5(信息-摘要算法 5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一  
  3. SHA即Secure Hash Algorithm(安全散列算法) 是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院 (NIST) 发布的一系列密码散列函数。  
  4.   
  5.   
  6. 使用方式如下:  
  7. MD5加密方式  
  8.   
  9. SString *) md5  
  10. {  
  11.     const charchar *cStr = [self UTF8String];  
  12.     unsigned char digest[CC_MD5_DIGEST_LENGTH];  
  13.     CC_MD5( cStr, strlen(cStr), digest );  
  14.    
  15.     NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];  
  16.    
  17.     for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)  
  18.         [output appendFormat:@"%02x", digest[i]];  
  19.    
  20.     return output;  
  21. }  
  22. SHA1加密方式  
  23.   
  24. - (NSString*) sha1  
  25. {  
  26.     const charchar *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];  
  27.     NSData *data = [NSData dataWithBytes:cstr length:self.length];  
  28.    
  29.     uint8_t digest[CC_SHA1_DIGEST_LENGTH];  
  30.    
  31.     CC_SHA1(data.bytes, data.length, digest);  
  32.    
  33.     NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];  
  34.    
  35.     for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)  
  36.         [output appendFormat:@"%02x", digest[i]];  
  37.    
  38.     return output;  
  39. }  
  40. 当然也可以结合BASE64来使用,这里的BASE64编码使用 GTMBase64实现,需要导入  
  41.   
  42. - (NSString *) sha1_base64  
  43. {  
  44.     const charchar *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];  
  45.     NSData *data = [NSData dataWithBytes:cstr length:self.length];  
  46.    
  47.     uint8_t digest[CC_SHA1_DIGEST_LENGTH];  
  48.    
  49.     CC_SHA1(data.bytes, data.length, digest);  
  50.    
  51.     NSData * base64 = [[NSData alloc]initWithBytes:digest length:CC_SHA1_DIGEST_LENGTH];  
  52.     base64 = [GTMBase64 encodeData:base64];  
  53.    
  54.     NSString * output = [[NSString alloc] initWithData:base64 encoding:NSUTF8StringEncoding];   
  55.     return output;   
  56. }  
  57.    
  58. - (NSString *) md5_base64  
  59. {  
  60.     const charchar *cStr = [self UTF8String];  
  61.     unsigned char digest[CC_MD5_DIGEST_LENGTH];  
  62.     CC_MD5( cStr, strlen(cStr), digest );  
  63.    
  64.     NSData * base64 = [[NSData alloc]initWithBytes:digest length:CC_MD5_DIGEST_LENGTH];  
  65.     base64 = [GTMBase64 encodeData:base64];  
  66.    
  67.     NSString * output = [[NSString alloc] initWithData:base64 encoding:NSUTF8StringEncoding];   
  68.     return output;  
  69. }  
  70. 通过拓展NSString,实现完整功能,全部代码  
  71.   
  72. @interface NSString (encrypto)  
  73. - (NSString *) md5;  
  74. - (NSString *) sha1;  
  75. - (NSString *) sha1_base64;  
  76. - (NSString *) md5_base64;  
  77. - (NSString *) base64;  
  78.    
  79. @end  
  80. @implementation NSString (encrypto)  
  81. - (NSString*) sha1  
  82. {  
  83.     const charchar *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];  
  84.     NSData *data = [NSData dataWithBytes:cstr length:self.length];  
  85.    
  86.     uint8_t digest[CC_SHA1_DIGEST_LENGTH];  
  87.    
  88.     CC_SHA1(data.bytes, data.length, digest);  
  89.    
  90.     NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];  
  91.    
  92.     for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)  
  93.         [output appendFormat:@"%02x", digest[i]];  
  94.    
  95.     return output;  
  96. }  
  97.    
  98. -(NSString *) md5  
  99. {  
  100.     const charchar *cStr = [self UTF8String];  
  101.     unsigned char digest[CC_MD5_DIGEST_LENGTH];  
  102.     CC_MD5( cStr, strlen(cStr), digest );  
  103.    
  104.     NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];  
  105.    
  106.     for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)  
  107.         [output appendFormat:@"%02x", digest[i]];  
  108.    
  109.     return output;  
  110. }  
  111.    
  112. - (NSString *) sha1_base64  
  113. {  
  114.     const charchar *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];  
  115.     NSData *data = [NSData dataWithBytes:cstr length:self.length];  
  116.    
  117.     uint8_t digest[CC_SHA1_DIGEST_LENGTH];  
  118.    
  119.     CC_SHA1(data.bytes, data.length, digest);  
  120.    
  121.     NSData * base64 = [[NSData alloc]initWithBytes:digest length:CC_SHA1_DIGEST_LENGTH];  
  122.     base64 = [GTMBase64 encodeData:base64];  
  123.    
  124.     NSString * output = [[NSString alloc] initWithData:base64 encoding:NSUTF8StringEncoding];   
  125.     return output;   
  126. }  
  127.    
  128. - (NSString *) md5_base64  
  129. {  
  130.     const charchar *cStr = [self UTF8String];  
  131.     unsigned char digest[CC_MD5_DIGEST_LENGTH];  
  132.     CC_MD5( cStr, strlen(cStr), digest );  
  133.    
  134.     NSData * base64 = [[NSData alloc]initWithBytes:digest length:CC_MD5_DIGEST_LENGTH];  
  135.     base64 = [GTMBase64 encodeData:base64];  
  136.    
  137.     NSString * output = [[NSString alloc] initWithData:base64 encoding:NSUTF8StringEncoding];   
  138.     return output;  
  139. }  
  140.    
  141. - (NSString *) base64  
  142. {      
  143.     NSData * data = [self dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];   
  144.     data = [GTMBase64 encodeData:data];   
  145.     NSString * output = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];   
  146.     return output;   
  147. }  
  148. @end  
  149. 实现时候不要忘记导入CC相关的库的头文件  
  150. CommonCrypto/CommonDigest.h  
  151. 转自http://blog.csdn.net/daiyelang/article/details/25596397
0 0
原创粉丝点击