我无法从私钥下面创建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的效果很好(问题在于解密时只有唯一的私钥)。我尝试从上述键中删除\r\n

最佳答案

经过大量搜索后,发现此Apple thread很有帮助。
我可以使用SwiftyRSA库管理此ASN.1解析。

    let privateKeySwifty = try PrivateKey(pemEncoded: privateKey)

    let secPrivateKey = try PrivateKey(reference: privateKeySwifty.reference)

深入研究之后,我看到有必要对keyData(ASN.1 Parsing)的标题进行剥离。

10-04 11:25