如何在 RSAParameters 中设置公钥 [重复]

Posted

技术标签:

【中文标题】如何在 RSAParameters 中设置公钥 [重复]【英文标题】:How to set public key in RSAParameters [duplicate] 【发布时间】:2017-07-06 07:56:17 【问题描述】:

我有用 Base64 编码的 RSA 公钥。 解码后我可以得到 RSA 公钥:

-----BEGIN PUBLIC KEY----- XXXXXXXXXXXXXXXXXXXXXXX -----结束公钥-----

现在我需要将此密钥导入 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】:

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

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

【讨论】:

以上是关于如何在 RSAParameters 中设置公钥 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

.net 中 RSA 公钥模数和指数的格式是啥?

.NET RSA 加密中的公钥在哪里

如何通过exponent和modulus来生成真正的public key

如何在 Netbeans 中设置环境变量?

如何在 Android 中设置 libsvm?

如何在 Laravel 中设置全局变量?