161 lines
5.3 KiB
Objective-C
Executable File
161 lines
5.3 KiB
Objective-C
Executable File
//
|
||
// NSString+AES.m
|
||
//
|
||
//
|
||
// Created by Bear on 16/11/26.
|
||
// Copyright © 2016年 Bear . All rights reserved.
|
||
//
|
||
|
||
#import "NSString+AES.h"
|
||
#import <CommonCrypto/CommonDigest.h>
|
||
#import <CommonCrypto/CommonCryptor.h>
|
||
#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
|