iOS常用加密算法

  1. iOS常用加密方法(aes、md5、base64)

  2. 1、AES加密
  3. NSData+AES.h文件

  4. //  
  5. //  NSData-AES.h  
  6. //  Smile  
  7. //  
  8. //  Created by 周 敏 on 12-11-24.  
  9. //  Copyright (c) 2012年 BOX. All rights reserved.  
  10. //  
  11.   
  12. #import <Foundation/Foundation.h>  
  13.   
  14. @class NSString;  
  15.   
  16. @interface NSData (Encryption)  
  17.   
  18. - (NSData *)AES256EncryptWithKey:(NSString *)key;   //加密  
  19. - (NSData *)AES256DecryptWithKey:(NSString *)key;   //解密  
  20.   
  21. @end  

  22. NSData+AES.m文件

  23. //  
  24. //  NSData-AES.h  
  25. //  Smile  
  26. //  
  27. //  Created by 周 敏 on 12-11-24.  
  28. //  Copyright (c) 2012年 BOX. All rights reserved.  
  29. //  
  30.   
  31. #import "NSData+AES.h"  
  32. #import <CommonCrypto/CommonCryptor.h>  
  33.   
  34. @implementation NSData (Encryption)  
  35.   
  36. - (NSData *)AES256EncryptWithKey:(NSString *)key {//加密  
  37.     char keyPtr[kCCKeySizeAES256+1];  
  38.     bzero(keyPtr, sizeof(keyPtr));  
  39.     [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];  
  40.     NSUInteger dataLength = [self length];  
  41.     size_t bufferSize = dataLength + kCCBlockSizeAES128;  
  42.     void *buffer = malloc(bufferSize);  
  43.     size_t numBytesEncrypted = 0;  
  44.     CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128,  
  45.                                           kCCOptionPKCS7Padding | kCCOptionECBMode,  
  46.                                           keyPtr, kCCBlockSizeAES128,  
  47.                                           NULL,  
  48.                                           [self bytes], dataLength,  
  49.                                           buffer, bufferSize,  
  50.                                           &numBytesEncrypted);  
  51.     if (cryptStatus == kCCSuccess) {  
  52.         return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];  
  53.     }  
  54.     free(buffer);  
  55.     return nil;  
  56. }  
  57.   
  58.   
  59. - (NSData *)AES256DecryptWithKey:(NSString *)key {//解密  
  60.     char keyPtr[kCCKeySizeAES256+1];  
  61.     bzero(keyPtr, sizeof(keyPtr));  
  62.     [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];  
  63.     NSUInteger dataLength = [self length];  
  64.     size_t bufferSize = dataLength + kCCBlockSizeAES128;  
  65.     void *buffer = malloc(bufferSize);  
  66.     size_t numBytesDecrypted = 0;  
  67.     CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128,  
  68.                                           kCCOptionPKCS7Padding | kCCOptionECBMode,  
  69.                                           keyPtr, kCCBlockSizeAES128,  
  70.                                           NULL,  
  71.                                           [self bytes], dataLength,  
  72.                                           buffer, bufferSize,  
  73.                                           &numBytesDecrypted);  
  74.     if (cryptStatus == kCCSuccess) {  
  75.         return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];  
  76.     }  
  77.     free(buffer);  
  78.     return nil;  
  79. }  
  80.   
  81. @end  
  82. 這裏AES在iOS加過密以後以nsdata的形式存下來,如果想以nsstring形式存儲,那麼對nsdata進行base64位編碼。

  83. 2、BASE64編碼
  84. 首先下載GTMBase64文件,在工程中加入三個文件
  85. GTMDefines.h
  86. GTMBase64.h
  87. GTMBase64.m
  88. 你可以在這裏找到這三個文件
  89. http://code.google.com/p/google-toolbox-for-mac/source/browse/trunk/Foundation/?r=87
  90. 你也可以在下面的demo裏面找到這3個文件,demo會完整實現文章裏面常用的3種編碼方法。
  91. 我在此稍微封裝一下:

  92. .h文件

  93. #pragma mark - base64  
  94. + (NSString*)encodeBase64String:(NSString *)input;  
  95. + (NSString*)decodeBase64String:(NSString *)input;  
  96. + (NSString*)encodeBase64Data:(NSData *)data;  
  97. + (NSString*)decodeBase64Data:(NSData *)data;  

  98. .m文件

  99. #pragma mark - base64  
  100. + (NSString*)encodeBase64String:(NSString * )input {   
  101.     NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];   
  102.     data = [GTMBase64 encodeData:data];   
  103.     NSString *base64String = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];   
  104.     return base64String;  
  105. }  
  106.   
  107. + (NSString*)decodeBase64String:(NSString * )input {   
  108.     NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];   
  109.     data = [GTMBase64 decodeData:data];   
  110.     NSString *base64String = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];   
  111.     return base64String;  
  112. }   
  113.   
  114. + (NSString*)encodeBase64Data:(NSData *)data {  
  115.     data = [GTMBase64 encodeData:data];   
  116.     NSString *base64String = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];  
  117.     return base64String;  
  118. }  
  119.   
  120. + (NSString*)decodeBase64Data:(NSData *)data {  
  121.     data = [GTMBase64 decodeData:data];   
  122.     NSString *base64String = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];  
  123.     return base64String;  
  124. }  

  125. 3、MD5加密 www.2cto.com
  126. NSString+MD5.h文件

  127. //  
  128. //  NSString+MD5Encrypt.h  
  129. //  Smile  
  130. //  
  131. //  Created by 周 敏 on 12-11-24.  
  132. //  Copyright (c) 2012年 BOX. All rights reserved.  
  133. //  
  134.   
  135. #import <CommonCrypto/CommonDigest.h>  
  136.   
  137. @interface NSString (MD5)  
  138.   
  139. - (NSString *)md5Encrypt;  
  140.   
  141. @end  


  142. NSString+MD5.m文件

  143. //  
  144. //  NSString+MD5Encrypt.h  
  145. //  Smile  
  146. //  
  147. //  Created by 周 敏 on 12-11-24.  
  148. //  Copyright (c) 2012年 BOX. All rights reserved.  
  149. //  
  150.   
  151. #import "NSString+MD5.h"  
  152.   
  153. @implementation NSString (MD5)  
  154.   
  155. - (NSString *)md5Encrypt {  
  156.     const char *original_str = [self UTF8String];  
  157.     unsigned char result[CC_MD5_DIGEST_LENGTH];  
  158.     CC_MD5(original_str, strlen(original_str), result);  
  159.     NSMutableString *hash = [NSMutableString string];  
  160.     for (int i = 0; i < 16; i++)  
  161.         [hash appendFormat:@"%02X", result[i]];  
  162.     return [hash lowercaseString];  
  163. }  
  164.   

  165. @end
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章