Разница между SecKeyCreateEncryptedData и SecKeyEncrypt в swift 3

При попытке зашифровать блок простых данных с помощью SecKeyCreateEncryptedData, он шифрует простые данные с использованием указанного алгоритма и работает нормально. Фрагмент кода, который я использовал для шифрования,

SecKeyCreateEncryptedData(publicKey.underlying,SecKeyAlgorithm.eciesEncryptionSt
    andardX963SHA1AESGCM,cdata!, &error)

Но когда я пытаюсь сделать то же самое шифрование с использованием SecKeyEncrypt, оно терпит неудачу с возвращаемым значением (-50). Фрагмент кода, используемый для моего шифрования:

SecKeyEncrypt(publicKey.underlying as SecKey, .PKCS1, digestBytes, 
    newdata.length, &signatureBytes, &signatureLength)

И я также не могу получить описание ошибки для кода ошибки -50.

0 ответов

Вот общая разница между этими двумя функциями, а не только Swift.

SecKeyCreateEncryptedData Функция предназначена для замены использования SecKeyEncrypt поскольку он доступен только для iOS 10+, и официальное руководство Apple использует его. Хотя обе функции занимает SecKey в качестве параметра способ получения экземпляра также отличается.

если ты publicKey работает нормально для SecKeyCreateEncryptedDataСкорее всего, то же самое publicKey не будет работать для SecKeyEncrypt функция.

Чтобы правильно сгенерировать SecKey за SecKeyEncrypt функция, вам нужно

  1. Получить SecCertificate используя SecCertificateCreateWithData, Обратите внимание, что сертификат должен быть в .der формат.
  2. Создать и оценить SecTrust на основе SecCertificate Вы только что создали.
  3. Получить SecKey от SecTrust

Вы можете найти более подробную информацию здесь Как я могу получить SecKeyRef из файла DER/PEM.

Другие вопросы по тегам