iOS開發之Objective-c的MD5/SHA1密碼編譯演算法的實現

來源:互聯網
上載者:User

標籤:

[objc] view plain copy
    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 

iOS開發之Objective-c的MD5/SHA1密碼編譯演算法的實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.