如何将服务器的公钥转换成SecKey格式来使用RSA加密数据?

问题描述 投票:0回答:0

我想将服务器的公钥(base64编码的字符串)转换成SecKey格式来使用RSA加密数据,但是无法将字符串转换成SecKey。

请告诉我是否需要将密钥转换为 SecKey 格式,如果是,请帮助我。

下面是我的代码。

func publicKeyFromString(_ keyString: String) -> SecKey? {
    guard let publicKeyString = keyString.base64Decoded() else { return nil }
    let publicKeyStringWithoutHeaders = publicKeyString.replacingOccurrences(of: "-----BEGIN RSA PUBLIC KEY-----\n", with: "").replacingOccurrences(of: "\n-----END RSA PUBLIC KEY-----\n", with: "")
    guard let publicKeyData = publicKeyStringWithoutHeaders.utf8Data else {
        print("Failed to decode the public key string.")
        return nil
    }
    let keyDict: [NSString: AnyObject] = [
        kSecAttrKeyType: kSecAttrKeyTypeRSA,
        kSecAttrKeyClass: kSecAttrKeyClassPublic,
        kSecAttrKeySizeInBits: 2048 as AnyObject
    ]
    var error: Unmanaged<CFError>?
    guard let publicKey = SecKeyCreateWithData(publicKeyData as CFData, keyDict as CFDictionary, &error) else {
        print("Failed to create public key:", error!.takeRetainedValue())
        return nil
    }
    return publicKey
}

用途:

let serverPublicKey = "LS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tCk1JSUJDZ0tDQVFFQWs0eE5pYjQ2eW9KL2l2c0s0SEhwcTlKYmQ4SGdzZlJTSG0yTHhxQWZRdVdaV1I3NVVrMWcKcjFCekluWXkxZFFYOVczanVOMFpKdXcvd3hSSTI2VFJRdWxWeXVHQk9aSER2Nk00aVRRNXlWNitpd1kxdlVDNgp4UFZLS3JYazFzNm9TUWVpSUFiangzMmIzRndBK1E3MkszVEJ2UUJRbUtuOExvaVR0UFJOMUo1Y3BWbEYzeXVjCnlDazlTQjR0ejdLQ2JSUHVScEsxclRyV2hmcmFxeVB3RGNvMVR6Vlo0K095d0hsbjFRZE9FL2xQQ1R5aGVKVUEKK1dsSmtRd00vRXdmVE1SekkrZTdwU2d2c3hEejFLZHpUakp6SjBzcXVUSVg2UDZHREhKelBCRWN5cDVNUlhSMwpuZXpUWDF2dmNlTGJVQW9hKzBzRmlCMU9sbVJMRTI2MGJ3SURBUUFCCi0tLS0tRU5EIFJTQSBQVUJMSUMgS0VZLS0tLS0K"
if let key = RSAHelper.publicKeyFromString(serverPublicKey) {
    print(key)
}

我发现错误

[seckey] SecKeyCreate init(RSAPublicKey) failed: -50
。请告诉我过程。

ios swift rsa public-key-exchange
© www.soinside.com 2019 - 2024. All rights reserved.