Как «загрузить» зашифрованный (AES-256) PDF-файл способом mmap () с помощью Quartz? - PullRequest
1 голос
/ 19 апреля 2011

Да, я знаю, что этот вопрос является чем-то вроде глотка всего ...

У меня есть файл PDF на диске, который зашифрован (AES-256, с использованием CommonCrypto / OpenSSL). Я хотел бы отобразить PDF с помощью функций Quartz CGPDF ... и обнаружил, что можно создать CGPDFDocument с CGDataProvider.

Мне интересно, возможно ли создать обратные вызовы для CGDataProvider, чтобы расшифровывать и загружать только те блоки в памяти, которые нужны для рендерера PDF Quartz. Я бы не стал записывать расшифрованный файл на диск с точки зрения безопасности и конфиденциальности.

Есть идеи?

Надеюсь, я смогу начать "пробную" пробу и ошибку с помощью сообщества stackoverflow:)

Ответы [ 2 ]

0 голосов
/ 11 августа 2011

В конечном итоге мы использовали API CGDataProviderCreateDirect и реализовали обратные вызовы C для дешифрования частей зашифрованных данных PDF, которые были загружены с использованием [NSData dataWithContentsOfMappedFile:] (который использует скрытую функцию mmap ()). Это позволило нам рендерить огромные зашифрованные PDF-файлы с коротким временем загрузки и низким использованием памяти.

0 голосов
/ 10 августа 2011

Если он достаточно мал, вы можете просто сохранить его в NSData - расшифровать на лету и сохранить в памяти.Если оно больше, то все сложнее.В конечном счете, люди также могут расшифровать ваш двоичный файл и извлечь из него ключ AES.

Защита паролем PDF может добавить маленький уровень безопасности, но его также очень легко обойти.

...