gpt4 book ai didi

ios - AES 解密在 iOS 7 中的行为与 iOS 8/9 不同

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:14:20 24 4
gpt4 key购买 nike

以下方法在 iOS 7 上运行时返回的结果与在 iOS 8/9 上运行时返回的结果不同。

+ (NSData *)decryptData:(NSData *)data key:(NSData *)key iv:(NSData *)iv;
{
NSData *result = nil;

// setup key
unsigned char cKey[FBENCRYPT_KEY_SIZE];
bzero(cKey, sizeof(cKey));
[key getBytes:cKey length:FBENCRYPT_KEY_SIZE];

// setup iv
char cIv[FBENCRYPT_BLOCK_SIZE];
bzero(cIv, FBENCRYPT_BLOCK_SIZE);
if (iv) {
[iv getBytes:cIv length:FBENCRYPT_BLOCK_SIZE];
}

// setup output buffer
size_t bufferSize = [data length] + FBENCRYPT_BLOCK_SIZE;
void *buffer = malloc(bufferSize);

// do decrypt
size_t decryptedSize = 0;
CCCryptorStatus cryptStatus =
CCCrypt(kCCDecrypt, FBENCRYPT_ALGORITHM, kCCOptionPKCS7Padding, cKey,
FBENCRYPT_KEY_SIZE, cIv, [data bytes], [data length], buffer,
bufferSize, &decryptedSize);

if (cryptStatus == kCCSuccess) {
result = [NSData dataWithBytesNoCopy:buffer length:decryptedSize];
} else {
free(buffer);
NSLog(@"[ERROR] failed to decrypt| CCCryptoStatus: %d", cryptStatus);
}

return result;
}

加密适用于 iOS 7/8/9。但是在iOS 7上解密结果为nil。

decryptedSize 执行后为0。 buffer 元素保持为 0。

一些定义是

#define FBENCRYPT_ALGORITHM kCCAlgorithmAES128
#define FBENCRYPT_BLOCK_SIZE kCCBlockSizeAES128
#define FBENCRYPT_KEY_SIZE kCCKeySizeAES256

我已经阅读了关于 SO 的类似 CCCrypt() 问题的答案。尝试了以下操作:

  1. cKey长度增加1
  2. cKey 长度增加到 FBENCRYPT_KEY_SIZE * 2 + 1
  3. cKey 的第一个字节设置为 0(有人说 iOS 6 在从 NSString 获取关键字节时这样做)

以上均无效。


当方法被调用时,我返回了一些示例数据。

传递给decryptData的三个参数是:

  • 数据:ea1e6896 b5731f40 1d560a18 f0729fa6
  • key :17c76e90 9a6fef8d b1fd45fa 2de18db0 d2236264 db6c8a60 125599ec 2dfb5614,256 位 AES256
  • iv: 41463531 38453234 44333835 42463636,16字节,与 block 大小相同

预期结果(以及 iOS8/9 上的实际结果)是 248e51af 66bf85d3 00003ab6 fe3c0000

最佳答案

快速猜测,因为没有什么信息可以继续:

数据使用与 PKCS#7(或 PKCS#5)不同的填充加密。 mcrypt(),虽然流行是由一些笨蛋编写的,并使用非标准的空填充,但如果数据的最后一个字节是 0x00,这既不安全又无法工作。

有关 PKC#7 通过的更多信息,请参阅此 SO answer .

如果填充明显不正确,CCCrypt 的早期版本会返回一个错误,这是一个安全错误,后来被纠正了。 IIRC iOS7 是最后一个将错误填充报告为错误的版本。

关于ios - AES 解密在 iOS 7 中的行为与 iOS 8/9 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31846857/

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