如何发送NSData作为密钥和四CCCrypt

我需要AES128encryption一个16字节的数据块使用一个密钥和一个IV到16字节的AES块。

我见过的每个CCCrypt示例都带有(NSString *)键和IV。 我的密钥和IV是NSData 16个字节。 我已经将NSData转换为hexstring,但结果是不正确的。 当我这样做时,我得到一个32字节的AES块。

所以我的问题是,我必须做什么来获得NSData作为一个const void *读入CCCrypt?

- (NSData *)AES128Operation:(CCOperation)operation key:(NSString *)key iv:(NSString *)iv theData:(NSData *)theData { char keyPtr[kCCKeySizeAES128 + 1]; bzero(keyPtr, sizeof(keyPtr)); [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; char ivPtr[kCCBlockSizeAES128 + 1]; bzero(ivPtr, sizeof(ivPtr)); if (iv) { [iv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding]; } NSUInteger dataLength = [theData length]; size_t bufferSize = dataLength + kCCBlockSizeAES128; void *buffer = malloc(bufferSize); size_t numBytesEncrypted = 0; CCCryptorStatus cryptStatus = CCCrypt(operation, kCCAlgorithmAES128, kCCOptionECBMode, keyPtr, kCCBlockSizeAES128, ivPtr, [theData bytes], dataLength, buffer, bufferSize, &numBytesEncrypted); if (cryptStatus == kCCSuccess) { return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted]; } free(buffer); return nil; } 

 + (NSData *)AES128:(NSData *)dataIn operation:(CCOperation)operation // kCC Encrypt, Decrypt key:(NSData *)key options:(CCOptions)options // kCCOption PKCS7Padding, ECBMode, iv:(NSData *)iv error:(NSError **)error { CCCryptorStatus ccStatus = kCCSuccess; size_t cryptBytes = 0; NSMutableData *dataOut = [NSMutableData dataWithLength:dataIn.length + kCCBlockSizeAES128]; ccStatus = CCCrypt( operation, kCCAlgorithmAES, options, key.bytes, key.length, iv.bytes, dataIn.bytes, dataIn.length, dataOut.mutableBytes, dataOut.length, &cryptBytes); if (ccStatus == kCCSuccess) { dataOut.length = cryptBytes; } else { if (error) { *error = [NSError errorWithDomain:@"kEncryptionError" code:ccStatus userInfo:nil]; } dataOut = nil; } return dataOut; }