Hibit_iOS/HiBit/Utils/GTM+AES/NSString+AES.m
2024-06-07 11:41:02 +08:00

161 lines
5.3 KiB
Objective-C
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// 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