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。

SecKeyCreateEncryptedData该功能旨在替换 的使用,SecKeyEncrypt因为它仅适用于 iOS 10+,Apple 官方指南正在使用该功能。虽然这两个函数都SecKey作为参数,但获取实例的方式也不同。

如果你publicKey工作SecKeyCreateEncryptedData得很好,很可能同样publicKey不适用于SecKeyEncrypt功能。

要正确生成SecKeyforSecKeyEncrypt函数,您需要

  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 回答