如何在 RSAParameters 中设置 public 键

How to set public key in RSAParameters

我有使用 Base64 编码的 RSA public 密钥。 解码后我可以获得 RSA public 密钥,如:

-----BEGIN PUBLIC KEY----- XXXXXXXXXXXXXXXXXXXXXXX -----END PUBLIC KEY-----

现在我需要将此密钥导入 RSACryptoServiceProvider。 我一直在寻找解决方案,但找不到任何有效的方法。 从我发现的片段中,我创建了这样的代码示例

    public static string Encrypt(string input, string base64PublicKey)
    {
        var rsa = new RSACryptoServiceProvider();
        var byteKey = System.Convert.FromBase64String(base64PublicKey);
        var byteInput = Encoding.UTF8.GetBytes(input);

        var parameters = rsa.ExportParameters(false);
        parameters.Modulus = byteKey;

        rsa.ImportParameters(parameters);

        var bytesEncrypted = rsa.Encrypt(byteInput, false);

        var result = System.Convert.ToBase64String(bytesEncrypted);

        return result;
    }

我想它没有正常工作,因为我总是从我正在集成的系统收到错误响应。

导入public密钥的方法正确吗? 如果不行怎么办?

您拥有的 public 密钥可能以 PKCS#1 格式编码,这是编码 RSA public 密钥的通用标准。

.NET crypto 类 不直接理解这种格式,您将不得不自己解析 ASN.1 编码以获得 模数 public exponent 从你的密钥中设置你的 RSAParameters 对象的相应参数。