// // NSString+AES.m // // // Created by Bear on 16/11/26. // Copyright © 2016年 Bear . All rights reserved. // #import "NSString+AES.h" #import #import #import "GTMBase64.h" static NSString *const PSW_AES_KEY = @"fyth4578bfhj6sl8"; static NSString *const AES_IV_PARAMETER = @"vhu578y4jj99ozd5"; @implementation NSString (AES) #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" - (NSString*)aci_encryptWithAES { NSData *data = [self dataUsingEncoding:NSUTF8StringEncoding]; NSData *AESData = [self AES128operation:kCCEncrypt data:data key:PSW_AES_KEY iv:AES_IV_PARAMETER]; NSString *baseStr_GTM = [self encodeBase64Data:AESData]; // NSLog(@"nGTMBase:%@", baseStr_GTM); return baseStr_GTM; /* 看情况使用 NSString *baseStr = [AESData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; NSLog(@"niOSCode:%@", baseStr); return baseStr; */ } - (NSString*)aci_decryptWithAES { // NSLog(@"%@",PSW_AES_KEY); // NSLog(@"%@",AES_IV_PARAMETER); NSString * string = self; NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding]; NSData *baseData_GTM = [string decodeBase64Data:data]; NSData *AESData_GTM = [string AES128operation:kCCDecrypt data:baseData_GTM key:PSW_AES_KEY iv:AES_IV_PARAMETER]; NSString *decStr_GTM = [[NSString alloc] initWithData:AESData_GTM encoding:NSUTF8StringEncoding]; // NSLog(@"nGTMBase:%@", decStr_GTM); /* 看情况使用 NSData *baseData = [[NSData alloc]initWithBase64EncodedString:self options:0]; NSData *AESData = [self AES128operation:kCCDecrypt data:baseData key:PSW_AES_KEY iv:AES_IV_PARAMETER]; NSString *decStr = [[NSString alloc] initWithData:AESData encoding:NSUTF8StringEncoding]; NSLog(@"niOSCode:%@", decStr); return decStr; */ return decStr_GTM; } /** * AES加解密算法 * * @param operation kCCEncrypt(加密)kCCDecrypt(解密) * @param data 待操作Data数据 * @param key key * @param iv 向量 * * @return NSData */ - (NSData *)AES128operation:(CCOperation)operation data:(NSData *)data key:(NSString *)key iv:(NSString *)iv { char keyPtr[kCCKeySizeAES128 + 1]; bzero(keyPtr, sizeof(keyPtr)); [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; // IV char ivPtr[kCCBlockSizeAES128 + 1]; bzero(ivPtr, sizeof(ivPtr)); [iv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding]; size_t bufferSize = [data length] + kCCBlockSizeAES128; void *buffer = malloc(bufferSize); size_t numBytesEncrypted = 0; CCCryptorStatus cryptorStatus = CCCrypt(operation, kCCAlgorithmAES128, kCCOptionPKCS7Padding, keyPtr, kCCKeySizeAES128, ivPtr, [data bytes], [data length], buffer, bufferSize, &numBytesEncrypted); if(cryptorStatus == kCCSuccess) { return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted]; } else { NSLog(@"Error"); } free(buffer); return nil; } /**< GTMBase64编码 */ - (NSString*)encodeBase64Data:(NSData *)data { data = [GTMBase64 encodeData:data]; NSString *base64String = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; return base64String; } /**< GTMBase64解码 */ - (NSData*)decodeBase64Data:(NSData *)data { data = [GTMBase64 decodeData:data]; return data; } - (NSString *) md5:(NSString *)str salt:(NSString *)salt{ const char *cStr = [str UTF8String]; const char *salts = [salt UTF8String]; unsigned char result[16]; CC_MD5( cStr, (int)strlen(cStr), result ); int count = (int)sizeof(result)+(int)strlen(salts) + 1; char *mmm = malloc(count); memcpy(mmm, result, 16); memcpy(mmm+16, salts, strlen(salts)); CC_MD5(mmm, (int)strlen(mmm), result); return [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7], result[8], result[9], result[10], result[11], result[12], result[13], result[14], result[15] ]; } + (NSString *)MD5String:(NSString *)signStr { const char *cstr = [signStr UTF8String]; unsigned char result[16]; CC_MD5(cstr, (CC_LONG)strlen(cstr), result); return [NSString stringWithFormat: @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7], result[8], result[9], result[10], result[11], result[12], result[13], result[14], result[15] ]; } #pragma clang diagnostic pop @end