我无法从下面的私钥创建SecKey
对象,我确实尝试了许多可用的答案,但没有任何帮助。
我的快速代码如下:
var error: Unmanaged<CFError>?
guard let keyData = Data(base64Encoded: key) else {
return nil
}
var keyAttributes: CFDictionary {
return [kSecAttrKeyType: kSecAttrKeyTypeRSA,
kSecAttrKeyClass: kSecAttrKeyClassPrivate,
kSecAttrKeySizeInBits: keySize] as CFDictionary
}
guard let secKey = SecKeyCreateWithData(keyData as CFData, keyAttributes, &error) else {
print(error.debugDescription) //Error Domain Code=-50 "RSA private key creation from data failed swift-iOS
return nil
}
预期结果是secKey
应具有有效值,并且高于guard
不应失败。
注意:公钥转换为相应的secKey
工作正常(问题出在解密时唯一的私钥(。我尝试从上面的密钥中删除rn
。
搜索了很多后,发现这个 Apple 线程很有帮助。 我能够使用 SwiftyRSA 库管理这个 ASN.1 解析。
let privateKeySwifty = try PrivateKey(pemEncoded: privateKey)
let secPrivateKey = try PrivateKey(reference: privateKeySwifty.reference)
深入挖掘后,我可以看到,需要对keyData
的标头进行条带化(ASN.1 解析(。