Как вы можете загрузить открытый или закрытый ключ из файла, а затем зашифровать или расшифровать данные с его помощью в Swift, не используя библиотеки или API?
Как загрузить ключ и зашифровать с помощью RSA Swift
Ответы (2)
Вы можете использовать встроенный в OS X OpenSSL для генерации и шифрования или комбинацию OS X и Swift.
Команды OpenSSL:
- openssl genrsa -out rsaPrivateKey.pem 4096 (скорее всего, 2048 тоже подойдет — выбор дилера)
- openssl rsa -in rsaPrivateKey.pem -out rsaPrivateKey.key
- openssl req -new -key rsaPrivateKey.key -out rsaCertReq.crt (для этого шага требуется основная информация, а iOS требует пароль, поэтому установите его, когда он запросит)
- openssl x509 -req -days 10000 -in rsaCertReq.crt -signkey rsaPrivateKey.key -out rsaCert.crt
- openssl x509 -outform der -in rsaCert.crt -out publicKey.der
- openssl pkcs12 -export -out privateKey.pfx -inkey rsaPrivateKey.key -in rsaCert.crt
В конце концов, важные файлы с точки зрения iOS — это publicKey.der и privateKey.pfx. Вы будете использовать publicKey.der для шифрования данных и privateKey.pfx для расшифровки.
Шифрование в iOS
В iOS, в дополнение к функциям поддержки кодирования и декодирования ключей, API сертификатов, ключей и служб доверия также обеспечивает базовое шифрование, дешифрование, подписание и проверку блоков данных с использованием следующих функций SecKey:
SecKeyEncrypt — шифрует блок данных с помощью указанного ключа.
SecKeyDecrypt — расшифровывает блок данных с помощью указанного ключа.
SecKeyRawSign — подписывает блок данных с помощью указанного ключа.
SecKeyRawVerify – проверяет подпись на соответствие блоку данных и указанному ключу.
Apple Docs
Шифрование и хеширование данных а>
Примеры использования этих функций можно найти в документации Apple Сертификат, ключ и задачи службы доверия для iOS
import UIKit
import CoreFoundation
Используйте заголовочный файл моста для Security.h
#import <Security/Security.h>
Хорошо, я провел для вас небольшое исследование, и вот что я придумал (на основе ответов, которые я вижу в это связанный вопрос).
Существует проект GitHub с открытым исходным кодом в Swift под названием Heimdall, который является хорошей оболочкой для системы безопасности Apple. В ReadMe на странице GitHub написано «Swift 1.2», но Xcode 7 и Swift 2.0 будут завершены в любой день, так что, надеюсь, они скоро будут обновлены.
Если вы хотите пропустить использование материалов с открытым исходным кодом, вам нужно напрямую обратиться к системе безопасности Apple. Найдите этот пример кода, который включает следующие вызовы: SecKeyEncrypt
и SecKeyDecrypt
.
Эти два вызова (и все в SecKey.h) кажутся функциями C, но документация Apple, на которую я ссылался, похоже, указывает на то, что может быть доступен Swift API.