【发布时间】:2021-09-18 21:59:29
【问题描述】:
我们正在尝试从“.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)
}
【问题讨论】: