在快速3中SecKeyCreateEncryptedData和SecKeyEncrypt之间的差异

时间:2018-03-17 05:18:36

标签: ios swift3 enclave

当尝试使用SecKeyCreateEncryptedData加密普通数据块时,它使用指定的算法加密普通数据并且工作正常。我用于加密的代码片段是

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

但是当我尝试使用SecKeyEncrypt进行相同的加密时,它失败并返回值为(-50)。用于加密的代码片段是

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

我也无法获得错误代码-50的错误说明。

1 个答案:

答案 0 :(得分:0)

这是这两个函数之间的一般区别,不仅限于Swift。

SecKeyCreateEncryptedData函数旨在代替SecKeyEncrypt的用法,因为它仅适用于iOS 10 +,Apple官方指南正在使用该函数。尽管两个函数都将SecKey作为参数,但获取实例的方式也有所不同。

如果您publicKeySecKeyCreateEncryptedData上工作正常,则有可能publicKeySecKeyEncrypt功能上无法正常工作。

要为SecKey函数正确生成SecKeyEncrypt,您需要

  1. 使用SecCertificate获取SecCertificateCreateWithData。请注意,证书应为.der格式。
  2. 根据您刚刚创建的SecTrust创建并评估SecCertificate
  3. SecKey中获取SecTrust

您可以在How can I get SecKeyRef from DER/PEM file处找到更多详细信息。