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

    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. -(NSString *) 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.   - (NSString *) sha1:(NSString *)input
      {
          const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding];
          NSData *data = [NSData dataWithBytes:cstr length:input.length];
          
          uint8_t digest[CC_SHA1_DIGEST_LENGTH];
          
          CC_SHA1(data.bytes, data.length, digest);
          
          NSMutableString *output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
          
          for(int i=0; i<CC_SHA1_DIGEST_LENGTH; i++) {
              [output appendFormat:@"%02x", digest[i]];
          }
          
          return output;
      }
    24. 当然也可以结合BASE64来使用,这里的BASE64编码使用 GTMBase64实现,需要导入  
    25.   
    26. - (NSString *) sha1_base64  
    27. {  
    28.     const charchar *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];  
    29.     NSData *data = [NSData dataWithBytes:cstr length:self.length];  
    30.    
    31.     uint8_t digest[CC_SHA1_DIGEST_LENGTH];  
    32.    
    33.     CC_SHA1(data.bytes, data.length, digest);  
    34.    
    35.     NSData * base64 = [[NSData alloc]initWithBytes:digest length:CC_SHA1_DIGEST_LENGTH];  
    36.     base64 = [GTMBase64 encodeData:base64];  
    37.    
    38.     NSString * output = [[NSString alloc] initWithData:base64 encoding:NSUTF8StringEncoding];   
    39.     return output;   
    40. }  
    41.    
    42. - (NSString *) md5_base64  
    43. {  
    44.     const charchar *cStr = [self UTF8String];  
    45.     unsigned char digest[CC_MD5_DIGEST_LENGTH];  
    46.     CC_MD5( cStr, strlen(cStr), digest );  
    47.    
    48.     NSData * base64 = [[NSData alloc]initWithBytes:digest length:CC_MD5_DIGEST_LENGTH];  
    49.     base64 = [GTMBase64 encodeData:base64];  
    50.    
    51.     NSString * output = [[NSString alloc] initWithData:base64 encoding:NSUTF8StringEncoding];   
    52.     return output;  
    53. }  
    54. 通过拓展NSString,实现完整功能,全部代码  
    55.   
    56. @interface NSString (encrypto)  
    57. - (NSString *) md5;  
    58. - (NSString *) sha1;  
    59. - (NSString *) sha1_base64;  
    60. - (NSString *) md5_base64;  
    61. - (NSString *) base64;  
    62.    
    63. @end  
    64. @implementation NSString (encrypto)  
    65. - (NSString*) sha1  
    66. {  
    67.     const charchar *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];  
    68.     NSData *data = [NSData dataWithBytes:cstr length:self.length];  
    69.    
    70.     uint8_t digest[CC_SHA1_DIGEST_LENGTH];  
    71.    
    72.     CC_SHA1(data.bytes, data.length, digest);  
    73.    
    74.     NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];  
    75.    
    76.     for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)  
    77.         [output appendFormat:@"%02x", digest[i]];  
    78.    
    79.     return output;  
    80. }  
    81.    
    82. -(NSString *) md5  
    83. {  
    84.     const charchar *cStr = [self UTF8String];  
    85.     unsigned char digest[CC_MD5_DIGEST_LENGTH];  
    86.     CC_MD5( cStr, strlen(cStr), digest );  
    87.    
    88.     NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];  
    89.    
    90.     for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)  
    91.         [output appendFormat:@"%02x", digest[i]];  
    92.    
    93.     return output;  
    94. }  
    95.    
    96. - (NSString *) sha1_base64  
    97. {  
    98.     const charchar *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];  
    99.     NSData *data = [NSData dataWithBytes:cstr length:self.length];  
    100.    
    101.     uint8_t digest[CC_SHA1_DIGEST_LENGTH];  
    102.    
    103.     CC_SHA1(data.bytes, data.length, digest);  
    104.    
    105.     NSData * base64 = [[NSData alloc]initWithBytes:digest length:CC_SHA1_DIGEST_LENGTH];  
    106.     base64 = [GTMBase64 encodeData:base64];  
    107.    
    108.     NSString * output = [[NSString alloc] initWithData:base64 encoding:NSUTF8StringEncoding];   
    109.     return output;   
    110. }  
    111.    
    112. - (NSString *) md5_base64  
    113. {  
    114.     const charchar *cStr = [self UTF8String];  
    115.     unsigned char digest[CC_MD5_DIGEST_LENGTH];  
    116.     CC_MD5( cStr, strlen(cStr), digest );  
    117.    
    118.     NSData * base64 = [[NSData alloc]initWithBytes:digest length:CC_MD5_DIGEST_LENGTH];  
    119.     base64 = [GTMBase64 encodeData:base64];  
    120.    
    121.     NSString * output = [[NSString alloc] initWithData:base64 encoding:NSUTF8StringEncoding];   
    122.     return output;  
    123. }  
    124.    
    125. - (NSString *) base64  
    126. {      
    127.     NSData * data = [self dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];   
    128.     data = [GTMBase64 encodeData:data];   
    129.     NSString * output = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];   
    130.     return output;   
    131. }  
    132. @end  
    133. 实现时候不要忘记导入CC相关的库的头文件  
    134. CommonCrypto/CommonDigest.h 

posted on 2016-04-11 13:29  NSSong  阅读(409)  评论(0编辑  收藏  举报