gpt4 book ai didi

objective-c - CCCrypt iOS5 和 iOS6 的区别

转载 作者:技术小花猫 更新时间:2023-10-29 10:27:47 26 4
gpt4 key购买 nike

我有一个使用 CCCrypt() 的解密/加密方法,它在 iOS5 上运行得非常好。现在我正在使用 iOS6 SDK 并且从未更改过我的代码,但似乎有什么地方坏了。我仍然可以用一个 key 加密一个字符串并解密它,但是如果我使用另一个 key 来解密同一个字符串,从 CCCrypt() 返回的 CCCryptStatus 仍然是 0(kCCSuccess) - 即使解密失败,因为在那之后我的 NSData 没有被填充。在 iOS5 上,我收到了错误消息 -4303,我当时可以处理。现在有什么问题吗?

我的代码:

char keyPtr[kCCKeySizeAES256+1]; 
bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)

// fetch key data
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];

if (encryptOrDecrypt == kCCDecrypt)
{
data = [GTMBase64 decodeData:data];
}

NSUInteger dataLength = [data length];

size_t bufferSize = dataLength + kCCBlockSizeAES128;

void *buffer = malloc(bufferSize);

size_t numBytesDecrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(encryptOrDecrypt,
kCCAlgorithmAES128,
kCCOptionPKCS7Padding,
keyPtr,
kCCKeySizeAES256,
NULL ,
[data bytes], dataLength,
buffer, bufferSize,
&numBytesDecrypted);

if (cryptStatus != kCCSuccess){
// do something, but cryptStatus is always 0!
}

编辑:在 iPad 模拟器 5 上对其进行了测试。当我使用另一个 key 进行解密时,我收到的状态是 -4303。只有在 ios6 中返回的状态是 0。

最佳答案

我不是加密方面的专家,但我遇到了同样的问题,并想出了一个解决方法,在有人找到真正的解决方案之前可能会很好。

我所做的就是确定哪个 iOS 正在运行,对于 6+,我正在将 CCCrypt 调用更改为无填充(0 表示无填充,1 是 kCCOptionPKCS7Padding 的枚举)

float version = [[UIDevice currentDevice].systemVersion floatValue];
if (version >= 6)
{
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, 0,
keyPtr, kCCKeySizeAES128,
ivPtr,
[self bytes], dataLength,
buffer, bufferSize,
&numBytesDecrypted );


if( cryptStatus == kCCSuccess )
{
return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
}

free( buffer );
return nil;
}
else
{
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, 1,
keyPtr, kCCKeySizeAES128,
ivPtr,
[self bytes], dataLength,
buffer, bufferSize,
&numBytesDecrypted );
if( cryptStatus == kCCSuccess )
{
return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
}

free( buffer );
return nil;
}

关于objective-c - CCCrypt iOS5 和 iOS6 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12596280/

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