【问题标题】:How to "load" an encrypted (AES-256) PDF file in mmap() fashion using Quartz?如何使用 Quartz 以 mmap() 方式“加载”加密的 (AES-256) PDF 文件?
【发布时间】:2011-04-19 18:11:46
【问题描述】:

是的,我知道这个问题有点含糊……

我在磁盘上有一个 PDF 文件,该文件已加密(AES-256,使用 CommonCrypto/OpenSSL)。 我想使用 Quartz 的 CGPDF... 函数渲染 PDF,发现可以使用 CGDataProvider 创建 CGPDFDocument。

我想知道是否可以为 CGDataProvider 创建回调,仅解密和加载 Quartz 的 PDF 渲染器需要的内存块。从安全/隐私的角度来看,我宁愿不将解密的文件写入磁盘。

有什么想法吗?

希望我可以通过 stackoverflow 社区的输入来开始一个“有启发性”的试验和错误:)

【问题讨论】:

    标签: ios pdf encryption openssl quartz-graphics


    【解决方案1】:

    如果它足够小,您可以将其保存在 NSData 中 - 即时解密并将其存储在内存中。如果它更大,事情会更困难。最终,人们还可以解密您的二进制文件并从中提取 AES 密钥。

    PDF 的密码保护可能会增加一个层安全性,但也很容易绕过。

    【讨论】:

    • 感谢您的回答。我忘了我的问题,我们自己已经想出了答案。还是谢谢!
    【解决方案2】:

    我们最终所做的是使用CGDataProviderCreateDirect API 并实现了 C 回调来解密部分加密的 PDF 数据,这些数据是使用 [NSData dataWithContentsOfMappedFile:] 加载的(在后台使用 mmap())。这使我们能够渲染巨大的加密 PDF,并且加载时间短且内存使用量低。

    【讨论】:

    • 我会对一些实现的示例代码感兴趣。尤其是解密过程的回调和块对齐。谢谢!
    • 你还在这里活动吗?你能提供一些源代码吗?如果没有,至少给出一些提示如何做到这一点?
    猜你喜欢
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    相关资源
    最近更新 更多