iOS AES的加密解密

主要是要得到加密后的原来的字符创,MD5无法得到原有的,只能用AES+base64

要用GTMBase64这个可以自己去下载,

主要看另外2个类文件,

[objc]  view plain  copy
  1. #import <Foundation/Foundation.h>  
  2. @class NSString;  
  3. @interface NSData (NSData_AES)  
  4.   
  5. - (NSData *)AES128EncryptWithKey:(NSString *)key;   //加密  
  6. - (NSData *)AES128DecryptWithKey:(NSString *)key;   //解密  
  7.   
  8. @end  
[objc]  view plain  copy
  1. #import <Foundation/Foundation.h>  
  2. @class NSString;  
  3. @interface NSData (NSData_AES)  
  4.   
  5. - (NSData *)AES128EncryptWithKey:(NSString *)key;   //加密  
  6. - (NSData *)AES128DecryptWithKey:(NSString *)key;   //解密  
  7.   
  8. @end  

[objc]  view plain  copy
  1. #import "NSData+NSData_AES.h"  
  2. #import <CommonCrypto/CommonCryptor.h>  
  3. #define gIv @"xxxxxxxxxxx" //可以自行定义16位  
  4.   
  5. @implementation NSData (NSData_AES)  
  6. //(key和iv向量这里是16位的) 这里是CBC加密模式,安全性更高  
  7.   
  8. - (NSData *)AES128EncryptWithKey:(NSString *)key//加密  
  9. {  
  10.     char keyPtr[kCCKeySizeAES128+1];  
  11.     bzero(keyPtr, sizeof(keyPtr));  
  12.     [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];  
  13.       
  14.     char ivPtr[kCCKeySizeAES128+1];  
  15.     memset(ivPtr, 0sizeof(ivPtr));  
  16.     [gIv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];  
  17.       
  18.     NSUInteger dataLength = [self length];  
  19.     size_t bufferSize = dataLength + kCCBlockSizeAES128;  
  20.     voidvoid *buffer = malloc(bufferSize);  
  21.     size_t numBytesEncrypted = 0;  
  22.     CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,  
  23.                                           kCCAlgorithmAES128,  
  24.                                           kCCOptionPKCS7Padding,  
  25.                                           keyPtr,  
  26.                                           kCCBlockSizeAES128,  
  27.                                           ivPtr,  
  28.                                           [self bytes],  
  29.                                           dataLength,  
  30.                                           buffer,  
  31.                                           bufferSize,  
  32.                                           &numBytesEncrypted);  
  33.     if (cryptStatus == kCCSuccess) {  
  34.         return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];  
  35.     }  
  36.     free(buffer);  
  37.     return nil;  
  38. }  
  39.   
  40.   
  41. - (NSData *)AES128DecryptWithKey:(NSString *)key//解密  
  42. {  
  43.     char keyPtr[kCCKeySizeAES128+1];  
  44.     bzero(keyPtr, sizeof(keyPtr));  
  45.     [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];  
  46.       
  47.     char ivPtr[kCCKeySizeAES128+1];  
  48.     memset(ivPtr, 0sizeof(ivPtr));  
  49.     [gIv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];  
  50.       
  51.     NSUInteger dataLength = [self length];  
  52.     size_t bufferSize = dataLength + kCCBlockSizeAES128;  
  53.     voidvoid *buffer = malloc(bufferSize);  
  54.     size_t numBytesDecrypted = 0;  
  55.     CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,  
  56.                                           kCCAlgorithmAES128,  
  57.                                           kCCOptionPKCS7Padding,  
  58.                                           keyPtr,  
  59.                                           kCCBlockSizeAES128,  
  60.                                           ivPtr,  
  61.                                           [self bytes],  
  62.                                           dataLength,  
  63.                                           buffer,  
  64.                                           bufferSize,  
  65.                                           &numBytesDecrypted);  
  66.     if (cryptStatus == kCCSuccess) {  
  67.         return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];  
  68.     }  
  69.     free(buffer);  
  70.     return nil;  
  71. }  
  72.   
  73. @end  
[objc]  view plain  copy
  1. #import "NSData+NSData_AES.h"  
  2. #import <CommonCrypto/CommonCryptor.h>  
  3. #define gIv @"xxxxxxxxxxx" //可以自行定义16位  
  4.   
  5. @implementation NSData (NSData_AES)  
  6. //(key和iv向量这里是16位的) 这里是CBC加密模式,安全性更高  
  7.   
  8. - (NSData *)AES128EncryptWithKey:(NSString *)key//加密  
  9. {  
  10.     char keyPtr[kCCKeySizeAES128+1];  
  11.     bzero(keyPtr, sizeof(keyPtr));  
  12.     [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];  
  13.       
  14.     char ivPtr[kCCKeySizeAES128+1];  
  15.     memset(ivPtr, 0sizeof(ivPtr));  
  16.     [gIv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];  
  17.       
  18.     NSUInteger dataLength = [self length];  
  19.     size_t bufferSize = dataLength + kCCBlockSizeAES128;  
  20.     voidvoid *buffer = malloc(bufferSize);  
  21.     size_t numBytesEncrypted = 0;  
  22.     CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,  
  23.                                           kCCAlgorithmAES128,  
  24.                                           kCCOptionPKCS7Padding,  
  25.                                           keyPtr,  
  26.                                           kCCBlockSizeAES128,  
  27.                                           ivPtr,  
  28.                                           [self bytes],  
  29.                                           dataLength,  
  30.                                           buffer,  
  31.                                           bufferSize,  
  32.                                           &numBytesEncrypted);  
  33.     if (cryptStatus == kCCSuccess) {  
  34.         return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];  
  35.     }  
  36.     free(buffer);  
  37.     return nil;  
  38. }  
  39.   
  40.   
  41. - (NSData *)AES128DecryptWithKey:(NSString *)key//解密  
  42. {  
  43.     char keyPtr[kCCKeySizeAES128+1];  
  44.     bzero(keyPtr, sizeof(keyPtr));  
  45.     [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];  
  46.       
  47.     char ivPtr[kCCKeySizeAES128+1];  
  48.     memset(ivPtr, 0sizeof(ivPtr));  
  49.     [gIv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];  
  50.       
  51.     NSUInteger dataLength = [self length];  
  52.     size_t bufferSize = dataLength + kCCBlockSizeAES128;  
  53.     voidvoid *buffer = malloc(bufferSize);  
  54.     size_t numBytesDecrypted = 0;  
  55.     CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,  
  56.                                           kCCAlgorithmAES128,  
  57.                                           kCCOptionPKCS7Padding,  
  58.                                           keyPtr,  
  59.                                           kCCBlockSizeAES128,  
  60.                                           ivPtr,  
  61.                                           [self bytes],  
  62.                                           dataLength,  
  63.                                           buffer,  
  64.                                           bufferSize,  
  65.                                           &numBytesDecrypted);  
  66.     if (cryptStatus == kCCSuccess) {  
  67.         return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];  
  68.     }  
  69.     free(buffer);  
  70.     return nil;  
  71. }  
  72.   
  73. @end  


[objc]  view plain  copy
  1. #import <Foundation/Foundation.h>  
  2.   
  3. @interface SecurityUtil : NSObject   
  4.   
  5. #pragma mark - base64  
  6. + (NSString*)encodeBase64String:(NSString *)input;  
  7. + (NSString*)decodeBase64String:(NSString *)input;  
  8.   
  9. + (NSString*)encodeBase64Data:(NSData *)data;  
  10. + (NSString*)decodeBase64Data:(NSData *)data;  
  11.   
  12. #pragma mark - AES加密  
  13. //将string转成带密码的data  
  14. + (NSString*)encryptAESData:(NSString*)string app_key:(NSString*)key ;  
  15. //将带密码的data转成string  
  16. +(NSString*)decryptAESData:(NSData*)data app_key:(NSString*)key ;  
  17.   
  18.   
  19. @end  
[objc]  view plain  copy
  1. #import <Foundation/Foundation.h>  
  2.   
  3. @interface SecurityUtil : NSObject   
  4.   
  5. #pragma mark - base64  
  6. + (NSString*)encodeBase64String:(NSString *)input;  
  7. + (NSString*)decodeBase64String:(NSString *)input;  
  8.   
  9. + (NSString*)encodeBase64Data:(NSData *)data;  
  10. + (NSString*)decodeBase64Data:(NSData *)data;  
  11.   
  12. #pragma mark - AES加密  
  13. //将string转成带密码的data  
  14. + (NSString*)encryptAESData:(NSString*)string app_key:(NSString*)key ;  
  15. //将带密码的data转成string  
  16. +(NSString*)decryptAESData:(NSData*)data app_key:(NSString*)key ;  
  17.   
  18.   
  19. @end  

[objc]  view plain  copy
  1. #import "SecurityUtil.h"  
  2. #import "GTMBase64.h"  
  3. #import "NSData+AES.h"  
  4.   
  5.   
  6. @implementation SecurityUtil  
  7.   
  8. #pragma mark - base64  
  9. + (NSString*)encodeBase64String:(NSString * )input {   
  10.     NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];   
  11.     data = [GTMBase64 encodeData:data];   
  12.     NSString *base64String = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];   
  13.     return base64String;  
  14. }  
  15.   
  16. + (NSString*)decodeBase64String:(NSString * )input {   
  17.     NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];   
  18.     data = [GTMBase64 decodeData:data];   
  19.     NSString *base64String = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];   
  20.     return base64String;  
  21. }   
  22.   
  23. + (NSString*)encodeBase64Data:(NSData *)data {  
  24.     data = [GTMBase64 encodeData:data];   
  25.     NSString *base64String = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];  
  26.     return base64String;  
  27. }  
  28.   
  29. + (NSString*)decodeBase64Data:(NSData *)data {  
  30.     data = [GTMBase64 decodeData:data];   
  31.     NSString *base64String = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];  
  32.     return base64String;  
  33. }  
  34.   
  35. #pragma mark - AES加密  
  36. //将string转成带密码的data  
  37. +(NSString*)encryptAESData:(NSString*)string app_key:(NSString*)key  
  38. {  
  39.     //将nsstring转化为nsdata  
  40.     NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];  
  41.     //使用密码对nsdata进行加密  
  42.     NSData *encryptedData = [data AES128EncryptWithKey:key];  
  43.     NSLog(@"加密后的字符串 :%@",[encryptedData base64Encoding]);  
  44.       
  45.     return [encryptedData base64Encoding];  
  46. }  
  47.   
  48. #pragma mark - AES解密  
  49. //将带密码的data转成string  
  50. +(NSString*)decryptAESData:(NSData*)data  app_key:(NSString*)key  
  51. {  
  52.     //使用密码对data进行解密  
  53.     NSData *decryData = [data AES128DecryptWithKey:key];  
  54.     //将解了密码的nsdata转化为nsstring  
  55.     NSString *str = [[NSString alloc] initWithData:decryData encoding:NSUTF8StringEncoding];  
  56.     NSLog(@"解密后的字符串 :%@",str);  
  57.     return [str autorelease];  
  58. }  
  59.   
  60. @end  
[objc]  view plain  copy
  1. #import "SecurityUtil.h"  
  2. #import "GTMBase64.h"  
  3. #import "NSData+AES.h"  
  4.   
  5.   
  6. @implementation SecurityUtil  
  7.   
  8. #pragma mark - base64  
  9. + (NSString*)encodeBase64String:(NSString * )input {   
  10.     NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];   
  11.     data = [GTMBase64 encodeData:data];   
  12.     NSString *base64String = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];   
  13.     return base64String;  
  14. }  
  15.   
  16. + (NSString*)decodeBase64String:(NSString * )input {   
  17.     NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];   
  18.     data = [GTMBase64 decodeData:data];   
  19.     NSString *base64String = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];   
  20.     return base64String;  
  21. }   
  22.   
  23. + (NSString*)encodeBase64Data:(NSData *)data {  
  24.     data = [GTMBase64 encodeData:data];   
  25.     NSString *base64String = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];  
  26.     return base64String;  
  27. }  
  28.   
  29. + (NSString*)decodeBase64Data:(NSData *)data {  
  30.     data = [GTMBase64 decodeData:data];   
  31.     NSString *base64String = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];  
  32.     return base64String;  
  33. }  
  34.   
  35. #pragma mark - AES加密  
  36. //将string转成带密码的data  
  37. +(NSString*)encryptAESData:(NSString*)string app_key:(NSString*)key  
  38. {  
  39.     //将nsstring转化为nsdata  
  40.     NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];  
  41.     //使用密码对nsdata进行加密  
  42.     NSData *encryptedData = [data AES128EncryptWithKey:key];  
  43.     NSLog(@"加密后的字符串 :%@",[encryptedData base64Encoding]);  
  44.       
  45.     return [encryptedData base64Encoding];  
  46. }  
  47.   
  48. #pragma mark - AES解密  
  49. //将带密码的data转成string  
  50. +(NSString*)decryptAESData:(NSData*)data  app_key:(NSString*)key  
  51. {  
  52.     //使用密码对data进行解密  
  53.     NSData *decryData = [data AES128DecryptWithKey:key];  
  54.     //将解了密码的nsdata转化为nsstring  
  55.     NSString *str = [[NSString alloc] initWithData:decryData encoding:NSUTF8StringEncoding];  
  56.     NSLog(@"解密后的字符串 :%@",str);  
  57.     return [str autorelease];  
  58. }  
  59.   
  60. @end  


具体的使用方法如下:

加密:

[SecurityUtilencryptAESData:@"XXXXXX" app_key:KEY]; 这里的是可以自己设置一个16位的字符串

解密:

NSData *EncryptData1 = [GTMBase64decodeString:[SecurityUtil encryptAESData:@"XXXXXX" app_key:KEY]];//解密前进行GTMBase64编码

NSString * string1 = [SecurityUtildecryptAESData:EncryptData1app_key:KEY];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值