gpt4 book ai didi

ios - CCCrypt AES加密后DataSize发生变化

转载 作者:行者123 更新时间:2023-11-28 22:53:13 27 4
gpt4 key购买 nike

我正在尝试使用 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 文件加密后dataLength为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 加密数据长度为 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

有人能告诉我为什么吗?

最佳答案

当您使用 block 密码时,必须应用填充,以使明文适合密码 block 。 AES 是一种 block 密码,使用 128 位、16 字节的 block 大小。在 CCOptions 中尝试使用显式填充和 CBC 模式,请参阅 CCCrypt 的 Apple 文档,了解如何做到这一点(尽管我在生活中看到过更好的加密方法描述)。

[编辑]注意:尝试 kCCOptionPKCS7Padding,CBC 可能是默认值。

关于ios - CCCrypt AES加密后DataSize发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11393424/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com