您的位置:首页 > 移动开发 > Swift

swift中调用OC对称加密AES

2016-02-19 15:32 856 查看
swift中调用AES加密

let aesSecretKey="**********"
CCUser.defaultUser.login(userNameTF.text!.AES128EncryptWithKey(aesSecretKey), password: passwordTF.text!.AES128EncryptWithKey(aesSecretKey)){
(result)->Void in
}


AES加密方法:最终以16进制字符串输出

//NSString->NSString,
- (NSString *)AES128EncryptWithKey:(NSString *)key
{
NSData *encryptData = [[self dataUsingEncoding:NSUTF8StringEncoding] AES128EncryptWithKey:key];
//    const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
//    NSData *data = [NSData dataWithBytes:cstr length:self.length];
//    NSData *encryptData = [data AES128EncryptWithKey:key];

//    NSData转16进制字符串输出
if (!encryptData || [encryptData length] == 0) {
return @"";
}
NSMutableString *string = [[NSMutableString alloc] initWithCapacity:[encryptData length]];
[encryptData enumerateByteRangesUsingBlock:^(const void *bytes, NSRange byteRange, BOOL *stop) {
unsigned char *dataBytes = (unsigned char*)bytes;
for (NSInteger i = 0; i < byteRange.length; i++) {
NSString *hexStr = [NSString stringWithFormat:@"%x", (dataBytes[i]) & 0xff];
if ([hexStr length] == 2) {
[string appendString:hexStr];
} else {
[string appendFormat:@"0%@", hexStr];
}
}
}];
NSLog(@"string %@",string);
return string;
}

//NSString->NSData
- (NSData *)AES128EncryptWithKey:(NSString *)key {
char keyPtr[kCCKeySizeAES128+1];

bzero(keyPtr, sizeof(keyPtr));
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];

NSUInteger dataLength = [self length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);

size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,  kCCAlgorithmAES,
kCCOptionPKCS7Padding | kCCOptionECBMode,
keyPtr,  kCCKeySizeAES128 ,
NULL,
[self bytes], dataLength,
buffer, bufferSize,
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {

return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
}

free(buffer);

return nil;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: