如何解决SecKeyCreateWithData 返回“Nil”,错误
我们正在尝试从“.der”文件创建一个“SecKey”。但是“SecKeyCreateWithData”总是抛出“Nil”并出现错误。
遵循的步骤::
首先,我们使用以下命令创建了 ECDSA 私钥和公钥对,然后将包含私钥的 .pem 文件转换为“.der”文件。最后使用“.der”文件通过代码生成“SecKey”。
用于生成私钥和公钥的命令::
openssl ecparam -genkey -name prime256v1 -noout -out ec-key-pair.pem
openssl ec -in ec-key-pair.pem -pubout -out ec-key-pair.pub
用于生成 .Der 文件的命令::
openssl pkey -outform der -in ec-key-pair.pem -out ec-key-pair.der
.pem 文件中的内容::
-----开始EC私钥-- MHcCAQEEIKJTc3zI8D07Myh7ZIR+wGyQgsjEeKdH0+hSiErK5AjzoAoGCCqGSM49 AwEHOUQDQgAEvbOBrM/D2fX05zKQYuJiTRP6YiUBabImrHb9s+OHimxUxX+E9jVe oQ6nxSOkfgm0H1OjLfp2xGLqkDTuF38UGQ== -----结束EC私钥-----
收到错误::
非托管 - _value : Error Domain=NSOSStatusErrorDomain Code=-50“从数据创建EC私钥失败” UserInfo={NSDescription=从数据创建EC私钥失败}
使用的最小部署目标::
iOS 14.0
使用的代码::
if let certificateData = NSData(contentsOf:Bundle.main.url(forResource: "ec-key-pair",withExtension: "der")! ) {
var error: Unmanaged<CFError>? = nil
let privateSecKey = SecKeyCreateWithData(certificateData,[
kSecAttrKeyType: kSecAttrKeyTypeEC,kSecAttrKeyClass: kSecAttrKeyClassPrivate] as NSDictionary,&error)
}
解决方法
您似乎没有以正确的格式传递密钥。您正在传递 ASN.1 DER,此处解释了 SecKeyCreateWithData
期望的格式:https://developer.apple.com/documentation/security/1643698-seckeycopyexternalrepresentation
对于椭圆曲线私钥,输出格式为公钥与秘密标量的大端编码或 04 || X || Y || K
连接在一起。
不知道有没有办法直接生成OpenSSL要求的格式。您可能需要进行一些解析!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。