如何在RSAParameters中设置公钥

时间:2017-07-06 07:56:18

标签: c# cryptography rsa rsacryptoserviceprovider

我在Base64中编码了RSA公钥。 解码后,我可以获得RSA公钥,如:

  

----- 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;
    }

我认为它无法正常工作,因为我总是从我正在集成的系统中得到错误的响应。

导入公钥是否正确? 如果不是我应该怎么做?

1 个答案:

答案 0 :(得分:1)

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

.NET加密类不直接理解这种格式,您必须自己解析ASN.1编码才能从密钥中获取模数公共指数并设置 RSAParameters 对象的相应参数。