2

SecKeyCreateEncryptedData を使用してプレーン データのブロックを暗号化しようとすると、指定されたアルゴリズムを使用してプレーン データが暗号化され、正常に動作します。暗号化に使用したコード スニペットは次のとおりです。

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

しかし、SecKeyEncrypt を使用して同じ暗号化を行おうとすると、戻り値 (-50) で失敗します。暗号化に使用されるコード スニペットは次のとおりです。

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

また、エラー コード -50 のエラーの説明も取得できません。

4

1 に答える 1

1

Swift に限らず、これら 2 つの関数の一般的な違いを次に示します。

SecKeyCreateEncryptedDataこの関数はSecKeyEncrypt、iOS 10 以降でのみ使用できるため、Apple の公式ガイドがそれを使用しているため、 の使用法を置き換えることを目的としています。どちらの関数もSecKeyパラメーターとして受け取りますが、インスタンスを取得する方法も異なります。

publicKeyで問題なく動作している場合でも、関数SecKeyCreateEncryptedDataでは同じpublicKeyことが機能しない可能性がありSecKeyEncryptます。

SecKeyfor関数を正しく生成するにはSecKeyEncrypt、次のことが必要です。

  1. SecCertificateを使用して取得しSecCertificateCreateWithDataます。.der証明書はフォーマットされている必要があることに注意してください。
  2. 作成したばかりのSecTrustに基づいて を作成し、評価します。SecCertificate
  3. SecKeyから を入手SecTrust

詳細については、How can I get SecKeyRef from DER/PEM file を参照してください。

于 2019-03-20T01:53:23.053 に答える