Пример кода для шифрования / дешифрования с открытым ключом на Mac? - PullRequest
6 голосов
/ 10 ноября 2010

Где я могу найти простой пример кода для шифрования и дешифрования с открытым ключом в Mac OS X?Я разочарован тем, что в «Руководстве по программированию сертификатов, ключей и служб доверия» Apple показано, как сделать это на iOS, но необходимые API (SecKeyEncrypt, SecKeyDecrypt), очевидно, недоступны в Mac OS X.способ сделать это в «CryptoSample», но он не выглядит ясным или простым, и пример проекта слишком стар, чтобы открыться с текущей версией Xcode.

Ответы [ 3 ]

6 голосов
/ 29 октября 2011

API Security Framework довольно часто меняются между выпусками Mac OS. Лучший подход зависит от того, на какую версию вы нацеливаетесь:

  1. Если ваш код должен работать только на 10.7 и выше, вы можете использовать Security Transforms , новый высокоуровневый общедоступный API для криптографических преобразований. Руководство по программированию защитных преобразований содержит полезный (и простой!) Пример кода:

    http://developer.apple.com/library/mac/#documentation/Security/Conceptual/SecTransformPG/SecurityTransformsBasics/SecurityTransformsBasics.html

    Вы захотите создать преобразование с помощью SecEncryptTransformCreate или SecDecryptTransformCreate, установить его ввод с помощью SecTransformSetAttribute и выполнить его с помощью SecTransformExecute.

  2. Если вам требуется поддержка Mac OS 10.6 или ниже, вы должны использовать низкоуровневые и довольно страшные API-интерфейсы CDSA. CryptoSample cdsaEncrypt является кратким примером.

    http://developer.apple.com/library/mac/#samplecode/CryptoSample/Listings/libCdsaCrypt_libCdsaCrypt_cpp.html

    Вы можете получить CSSM_CSP_HANDLE и CSSM_KEY из SecKeyRef, используя SecKeyGetCSPHandle и SecKeyGetCSSMKey, соответственно.

    Чтобы узнать больше о CDSA, полная спецификация доступна в Open Group (бесплатно, но требует регистрации):

    https://www2.opengroup.org/ogsys/jsp/publications/PublicationDetails.jsp?publicationid=11287

    Удачи!

  3. Если закрытый ключ был создан на экспорт, вы можете экспортировать его в незащищенный формат и напрямую использовать openssl. Это помещает необработанные данные ключа непосредственно в адресное пространство вашего приложения, поэтому оно побеждает одну из основных целей цепочки для ключей. Не делай этого.

  4. Наконец, вы можете возиться с частными функциями. Mac OS 10.6 и 10.7 включают, но не публично объявляют, SecKeyEncrypt и SecKeyDecrypt с теми же аргументами, что и в iOS. Быстрое и грязное решение - просто объявить и использовать их (слабо связанные с обычными предостережениями). Вероятно, это плохая идея делать в коде, который вы планируете распространять среди других.

4 голосов
/ 30 апреля 2014

Существует реализация дешифрования данных с использованием открытого ключа по адресу: https://github.com/karstenBriksoft/CSSMPublicKeyDecrypt. Security.framework не имеет общедоступного API для такого рода функций, поэтому CSSM необходимо использовать напрямую, даже если он помечен как устаревший. Чтобы зашифровать с открытым ключом, просто используйте SecEncryptTransformCreate, но для расшифровки с открытым ключом вам нужно использовать класс CSSMPublicKeyDecrypt.

1 голос
/ 10 ноября 2010

Mac OS X содержит OpenSSL в libcrypto.Платформа CommonCrypto, похоже, основана на SSLeay, предшественнике OpenSSL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...