zoukankan      html  css  js  c++  java
  • 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 
  • 相关阅读:
    常用模块介绍
    正则表达式/re模块
    模块简介/模块的导入/模块的查找顺序/绝对导入和相对导入/软件开发目录规范
    迭代器/for循环本质/生成器/常用内置方法
    函数递归/二分法/列表,字典生成式/三元表达式/匿名函数/内置函数
    闭包函数/装饰器
    函数对象/函数的嵌套定义与调用/名称空间和作用域
    初识函数
    文件处理/光标移动/实时检测
    7-5字符编码和文件处理
  • 原文地址:https://www.cnblogs.com/NSong/p/5377992.html
Copyright © 2011-2022 走看看