当尝试使用SecKeyCreateEncryptedData加密普通数据块时,它使用指定的算法加密普通数据并且工作正常。我用于加密的代码片段是
SecKeyCreateEncryptedData(publicKey.underlying,SecKeyAlgorithm.eciesEncryptionSt
andardX963SHA1AESGCM,cdata!, &error)
但是当我尝试使用SecKeyEncrypt进行相同的加密时,它失败并返回值为(-50)。用于加密的代码片段是
SecKeyEncrypt(publicKey.underlying as SecKey, .PKCS1, digestBytes,
newdata.length, &signatureBytes, &signatureLength)
我也无法获得错误代码-50的错误说明。
答案 0 :(得分:0)
这是这两个函数之间的一般区别,不仅限于Swift。
SecKeyCreateEncryptedData
函数旨在代替SecKeyEncrypt
的用法,因为它仅适用于iOS 10 +,Apple官方指南正在使用该函数。尽管两个函数都将SecKey
作为参数,但获取实例的方式也有所不同。
如果您publicKey
在SecKeyCreateEncryptedData
上工作正常,则有可能publicKey
在SecKeyEncrypt
功能上无法正常工作。
要为SecKey
函数正确生成SecKeyEncrypt
,您需要
SecCertificate
获取SecCertificateCreateWithData
。请注意,证书应为.der
格式。SecTrust
创建并评估SecCertificate
。SecKey
中获取SecTrust
您可以在How can I get SecKeyRef from DER/PEM file处找到更多详细信息。