我正在尝试使用 CCCrypt 加密我的数据,但它有问题,我加密后数据长度发生了变化,但解密时没有发生,这是以下代码。
- (NSData *)AES256EncryptWithKeyGenerateIV:(NSString *)key {
char keyPtr[kCCKeySizeAES128+1];
bzero(keyPtr, sizeof(keyPtr));
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
char ivPtr[kCCKeySizeAES128+1];
unsigned char result[CC_MD5_DIGEST_LENGTH];
CC_MD5([key UTF8String], strlen([key UTF8String]), result);
NSString* resultString = [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]
];
resultString = [resultString substringToIndex:16];
bzero(ivPtr, sizeof(ivPtr));
[resultString getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];
NSUInteger dataLength = [self length];
NSLog(@"Before encrypt dataLength is %d",dataLength);
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t numBytesDecrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128,
0,
keyPtr, kCCBlockSizeAES128,
ivPtr,
[self bytes], dataLength,
buffer, bufferSize,
&numBytesDecrypted);
NSLog(@"After file encrypted dataLength is %d",numBytesDecrypted);
if (cryptStatus == kCCSuccess) {
return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
}
free(buffer);
return nil;
}
这是我打印数据长度的日志:
2012-07-09 18:29:20.787 加密前 dataLength 为 248
2012-07-09 18:29:20.788 文件加密后 dataLength 为 240
2012-07-09 18:29:20.789 加密前 dataLength 为 20
2012-07- 09 18:29:20.790 文件加密后 dataLength 为 16
2012-07-09 18:29:20.792 加密前 dataLength 为 583
2012-07-09 18:29:20.792 文件加密后 dataLength 为 576
2012-07-09 18: 29:20.795 加密前 dataLength 为 31120
2012-07-09 18:29:20.796 文件加密后 dataLength 为 31120
2012-07-09 18:29:20.797 加密前 dataLength 为 27551
2012-07-09 18:29:20.798 后文件加密数据长度为 27536
2012-07-09 18:29:20.800 加密前数据长度为 1266
2012-07-09 18:29:20.800 文件加密后 dataLength 为 1264
2012-07-09 18:29:20.802 加密前 dataLength 为 431315
2012-07-09 18:29:20.809 文件加密后 dataLength 为 431312
2012-07 -09 18:29:20.815 加密前 dataLength 为 204
2012-07-09 18:29:20.815 文件加密后 dataLength 为 192
2012-07-09 18:29:20.817 加密前 dataLength 为 1083
2012-07-09 18: 29:20.817 文件加密后 dataLength 为 1072
2012-07-09 18:29:20.818 加密前 dataLength 为 440
2012-07-09 18:29:20.819 文件加密后 dataLength 为 432
有人可以告诉我为什么吗?