IOS使用Openssl aes256加密
2017-12-02 本文已影响29人
海的原滋味
- (NSString *)AES256Encrypt:(NSString *)dataString WithKey:(NSString *)key iv:(NSString *)iv {
NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding];
NSData *dataToEncrypt = [dataString dataUsingEncoding:NSUTF8StringEncoding];
NSData *ivData = [iv dataUsingEncoding:NSUTF8StringEncoding];
NSUInteger dataLength = [dataToEncrypt length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
keyData.bytes, kCCKeySizeAES256,
ivData.bytes, // initialisation vector
dataToEncrypt.bytes,
dataToEncrypt.length, /* input */
buffer, bufferSize, /* output */
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
//the returned NSData takes ownership of the buffer and will free it on deallocation
NSData *data = [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
return [[NSString alloc] initWithData:[GTMBase64 encodeData:data] encoding:NSUTF8StringEncoding];
}
free(buffer); //free the buffer;
return nil;
}
- (NSString *)AES256Decrypt:(NSString *)originString WithKey:(NSString *)key iv:(NSString *)iv {
NSData *originData = [originString dataUsingEncoding:NSUTF8StringEncoding];
NSData *cipherData = [GTMBase64 decodeData:originData];
NSData *keydata = [key dataUsingEncoding:NSUTF8StringEncoding];
NSData *dataToEncrypt = cipherData;
NSUInteger dataLength = [dataToEncrypt length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t numBytesDecrypted = 0;
NSData *ivData = [iv dataUsingEncoding:NSUTF8StringEncoding];
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
kCCAlgorithmAES128,
kCCOptionPKCS7Padding,
keydata.bytes,
kCCKeySizeAES256,
ivData.bytes,
[dataToEncrypt bytes],
[dataToEncrypt length],
buffer,
1024,
&numBytesDecrypted);
if (cryptStatus == kCCSuccess) {
NSData *data = [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
free(buffer); //free the buffer;
return nil;
}