//AES加密
+(NSString*)encodeAESWith:(NSString*)str{
if(!str) {
return@"";
}
NSString* key=AESKey;//密钥
NSData*data=[str dataUsingEncoding:NSUTF8StringEncoding];//待加密字符转为NSData型
charkeyPtr[kKeySize+1];
memset(keyPtr,0,sizeof(keyPtr));
[keygetCString:keyPtrmaxLength:sizeof(keyPtr)encoding:NSUTF8StringEncoding];
NSUIntegerdataLength = [datalength];
size_tbufferSize = dataLength +kCCBlockSizeAES128;
void*buffer =malloc(bufferSize);
size_tnumBytesCrypted =0;
NSData*initVector = [kInitVectordataUsingEncoding:NSUTF8StringEncoding];
CCCryptorStatuscryptStatus =CCCrypt(kCCEncrypt,
kCCAlgorithmAES128,
kCCOptionPKCS7Padding,
keyPtr,
kCCBlockSizeAES128,
initVector.bytes,
[databytes],
dataLength,
buffer,
bufferSize,
&numBytesCrypted);
if(cryptStatus ==kCCSuccess) {
NSData*resultData=[NSDatadataWithBytesNoCopy:bufferlength:numBytesCrypted];
NSString*result = [resultDatabase64EncodedStringWithOptions:0];
returnresult;
}
free(buffer);
return@"";
}
//AES解密
+ (NSString*)decodeAESString:(NSString*)aesEncodedString{
if(!aesEncodedString){
return@"";
}
NSData*contentData = [[NSDataalloc]initWithBase64EncodedString:aesEncodedStringoptions:NSDataBase64DecodingIgnoreUnknownCharacters];
NSUIntegerdataLength = contentData.length;
charkeyPtr[kKeySize+1];
memset(keyPtr,0,sizeof(keyPtr));
[AESKeygetCString:keyPtrmaxLength:sizeof(keyPtr)encoding:NSUTF8StringEncoding];
size_tdecryptSize = dataLength +kCCBlockSizeAES128;
void*decryptedBytes =malloc(decryptSize);
size_tactualOutSize =0;
NSData*initVector = [kInitVectordataUsingEncoding:NSUTF8StringEncoding];
CCCryptorStatuscryptStatus =CCCrypt(kCCDecrypt,
kCCAlgorithmAES128,
kCCOptionPKCS7Padding,
keyPtr,
kKeySize,
initVector.bytes,
contentData.bytes,
dataLength,
decryptedBytes,
decryptSize,
&actualOutSize);
if(cryptStatus ==kCCSuccess) {
NSData*dataTemp = [NSDatadataWithBytesNoCopy:decryptedByteslength:actualOutSize];
NSString*str = [[NSStringalloc]initWithData:dataTempencoding:NSUTF8StringEncoding];
returnstr;
}
free(decryptedBytes);
return@"";
}
网友评论