iOS AES的加密解密

來源:互聯網
上載者:User

iOS AES的加密解密

主要是要得到加密後的原來的字元創,MD5無法得到原有的,只能用AES+base64

要用GTMBase64這個可以自己去下載,

主要看另外2個類檔案,

#import @class NSString;@interface NSData (NSData_AES)- (NSData *)AES128EncryptWithKey:(NSString *)key;   //加密- (NSData *)AES128DecryptWithKey:(NSString *)key;   //解密@end

#import "NSData+NSData_AES.h"#import #define gIv @"xxxxxxxxxxx" //可以自行定義16位@implementation NSData (NSData_AES)//(key和iv向量這裡是16位的) 這裡是CBC加密模式,安全性更高- (NSData *)AES128EncryptWithKey:(NSString *)key//加密{    char keyPtr[kCCKeySizeAES128+1];    bzero(keyPtr, sizeof(keyPtr));    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];        char ivPtr[kCCKeySizeAES128+1];    memset(ivPtr, 0, sizeof(ivPtr));    [gIv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];        NSUInteger dataLength = [self length];    size_t bufferSize = dataLength + kCCBlockSizeAES128;    void *buffer = malloc(bufferSize);    size_t numBytesEncrypted = 0;    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,                                          kCCAlgorithmAES128,                                          kCCOptionPKCS7Padding,                                          keyPtr,                                          kCCBlockSizeAES128,                                          ivPtr,                                          [self bytes],                                          dataLength,                                          buffer,                                          bufferSize,                                          &numBytesEncrypted);    if (cryptStatus == kCCSuccess) {        return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];    }    free(buffer);    return nil;}- (NSData *)AES128DecryptWithKey:(NSString *)key//解密{    char keyPtr[kCCKeySizeAES128+1];    bzero(keyPtr, sizeof(keyPtr));    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];        char ivPtr[kCCKeySizeAES128+1];    memset(ivPtr, 0, sizeof(ivPtr));    [gIv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];        NSUInteger dataLength = [self length];    size_t bufferSize = dataLength + kCCBlockSizeAES128;    void *buffer = malloc(bufferSize);    size_t numBytesDecrypted = 0;    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,                                          kCCAlgorithmAES128,                                          kCCOptionPKCS7Padding,                                          keyPtr,                                          kCCBlockSizeAES128,                                          ivPtr,                                          [self bytes],                                          dataLength,                                          buffer,                                          bufferSize,                                          &numBytesDecrypted);    if (cryptStatus == kCCSuccess) {        return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];    }    free(buffer);    return nil;}@end


#import @interface SecurityUtil : NSObject #pragma mark - base64+ (NSString*)encodeBase64String:(NSString *)input;+ (NSString*)decodeBase64String:(NSString *)input;+ (NSString*)encodeBase64Data:(NSData *)data;+ (NSString*)decodeBase64Data:(NSData *)data;#pragma mark - AES加密//將string轉成帶密碼的data+ (NSString*)encryptAESData:(NSString*)string app_key:(NSString*)key ;//將帶密碼的data轉成string+(NSString*)decryptAESData:(NSData*)data app_key:(NSString*)key ;@end

#import "SecurityUtil.h"#import "GTMBase64.h"#import "NSData+AES.h"@implementation SecurityUtil#pragma mark - base64+ (NSString*)encodeBase64String:(NSString * )input {     NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];     data = [GTMBase64 encodeData:data];     NSString *base64String = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; return base64String;}+ (NSString*)decodeBase64String:(NSString * )input {     NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];     data = [GTMBase64 decodeData:data];     NSString *base64String = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; return base64String;} + (NSString*)encodeBase64Data:(NSData *)data {data = [GTMBase64 encodeData:data];     NSString *base64String = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];return base64String;}+ (NSString*)decodeBase64Data:(NSData *)data {data = [GTMBase64 decodeData:data];     NSString *base64String = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];return base64String;}#pragma mark - AES加密//將string轉成帶密碼的data+(NSString*)encryptAESData:(NSString*)string app_key:(NSString*)key{    //將nsstring轉化為nsdata    NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];    //使用密碼對nsdata進行加密    NSData *encryptedData = [data AES128EncryptWithKey:key];    NSLog(@"加密後的字串 :%@",[encryptedData base64Encoding]);        return [encryptedData base64Encoding];}#pragma mark - AES解密//將帶密碼的data轉成string+(NSString*)decryptAESData:(NSData*)data  app_key:(NSString*)key{    //使用密碼對data進行解密    NSData *decryData = [data AES128DecryptWithKey:key];    //將解了密碼的nsdata轉化為nsstring    NSString *str = [[NSString alloc] initWithData:decryData encoding:NSUTF8StringEncoding];    NSLog(@"解密後的字串 :%@",str);    return [str autorelease];}@end


具體的使用方法如下:

加密:

[SecurityUtilencryptAESData:@"XXXXXX" app_key:KEY]; 這裡的是可以自己設定一個16位的字串

解密:

NSData *EncryptData1 = [GTMBase64decodeString:[SecurityUtil encryptAESData:@"XXXXXX" app_key:KEY]];//解密前進行GTMBase64編碼

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


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.