gpt4 book ai didi

ios - AES 加密算法无法解密少数文档格式

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

我正在尝试使用 AES 加密算法解密文档。

我正在从 enc 文件中获取 key 并在算法中使用它。

当我尝试解密文档时,我无法解密一些格式的文档,例如 docx、xlsx、pptx 和 txt 文件。请在下面找到我的代码。

- (NSData *)AES256Decrypt
{

NSString* path = [[NSBundle mainBundle] pathForResource:<filename> ofType:@"enc"];

// fetch key data from the key file
NSData *keyData = [NSData dataWithContentsOfFile:path];

NSUInteger dataLength = [self length];

size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);

size_t numBytesDecrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionECBMode,
[keyData bytes], kCCKeySizeAES256,
NULL
[self bytes], dataLength, /* input */
buffer, bufferSize, /* output */
&numBytesDecrypted);

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

free(buffer);
return nil;
}

我将上述方法添加为 NSData 的类别。

我尝试在客户端加密和解密。即使该文件也无法正确解密。当我尝试打开解密的文件时,在使用 QLPreviewController 查看文档时出现 office 打开 xml 字处理文档 错误。

我无法找到为什么只有少数文档会发生这种情况。谁能帮我解决这个问题。谢谢

最佳答案

如果您能够解密一些但不是所有指向可能存在填充问题的文件。我注意到您没有提供 kCCOptionPKCS7Padding。如果数据不是大小为偶数 block 的倍数,则需要某种形式的填充。 (当然,可以使用像 CTR 模式这样的流密码,但这通常是一个糟糕的选择。)

使用 ECB 模式 (kCCOptionECBMode) 真的很糟糕,您真的应该使用默认的 CBC 以及 iv。

参见 Bob ‘n Alice On Security
Original
原创

ECB mode
ECB 模式(Eve 喜欢 ECB)

CBC mode
CBC模式

看出区别了吗?仍想使用 ECB?

关于ios - AES 加密算法无法解密少数文档格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22062165/

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