RSA 的“SecKey”对象创建失败,错误域代码=-50“从数据创建 RSA 私钥失败 swift-iOS

`SecKey` object creation for RSA failing, Error Domain Code=-50 "RSA private key creation from data failed swift-iOS

我无法从私钥下面创建 SecKey 对象,我确实尝试了这里提供的许多答案,但没有任何帮助。

我的swift一段代码如下:

    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 应该不会失败。

注意:Public 密钥转换为相应的 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) 的 header 进行条带化。