Недавно мне поручили проект iOS, где мне нужно подписать документ в формате pdf с помощью ключа, который приложение загрузит с сервера.
У меня еще нет четкого представления о процессе, связанном с подписанием документов, до сих пор я знаю, что я буду подписывать свой pdf-файл, используя предоставленный мне файл закрытого ключа, а затем проверка будет выполняться с использованием открытого ключа. версия того же файла.
Я видел, что цифровой знак можно получить с помощью таких библиотек, как iText для Java или iTextSharp для C#. Вот почему я хотел бы знать, есть ли что-то подобное для iOS?. И если нет, то каким будет процесс для достижения этого с использованием возможностей Quartz для управления документами в формате pdf?
Что ж... Я проверял документы Apple и нашел это:
https://developer.apple.com/documentation/security/certificate_key_and_trust_services
Я думаю, что это должно поддерживать формат X.509 ... который я мог бы использовать для подписи pdf в качестве экземпляра os CFData, я думаю. Также я проверял пример кода CryptoExercise, но я не уверен на 100%, что это то, что я ищу.
В других предложениях мне посоветовали проверить документацию Adobe, но я еще не нашел API-интерфейс C для подписи документов с использованием сертификатов.
Если кто-то использовал службы сертификатов, предоставляемые Apple... было бы здорово получить любое предложение или больше примеров кода, чтобы понять процесс.
Ответ 1 · рейтинг 10 · Jimmy Koerting
Пабло,
подписание PDF-документов - сложная задача (моя компания занимается этим в мире Windows на Паскале).
В общем, я могу вам сказать, что вы, вероятно, не найдете пригодный для использования исходный код, который вы могли бы просто включить в свой проект. Чтобы увидеть, как это делается, источник iText является хорошей отправной точкой, потому что там все есть.
В Objective-C вы на правильном пути. Использование сертификатов X.509 с такими функциями, как SecKeyRawSign - это правильный путь (поскольку фактические данные отступы устарели, вам нужно создать свой собственный отступ для поддержки, например, SHA256. Вы можете увидеть здесь, как это делается: В чем разница между различными типами заполнения на iOS ?). "dataToSign" - это не что иное, как хэш содержимого PDF (например, SHA256), который вы хотите подписать.
Чтобы узнать, какую именно часть исходного PDF-файла вы должны подписать, вы должны проверить документацию Adobe PDF 1.6 или выполнить поиск в группах, говорящих об этом. Не имеет значения, на каком языке вы собираетесь подписывать PDF.
В конце концов, вы вставите подпись и некоторую информацию о подписи в предопределенную часть документа PDF (следите за тем, чтобы не сломать действительный хеш, сделав это;)), и это можно будет увидеть и проверить с любой другой подписью PDF. /проверочное программное обеспечение.
Мне жаль, что я не могу предоставить вам соответствующий код, но вы найдете достаточно примеров сертификатов X.509, например. создание соединения SSL/SSH. И если вы будете искать SecKeyRawSign, вы даже найдете несколько образцов для подписи (по крайней мере, с другими шаблонами). Это все, что вам нужно, если вы найдете синтаксис PDF для взятия части содержимого для подписи и встраивания подписи в окончательный PDF-файл.
Я надеюсь, что это было полезно для вас
Джимми