从字符串初始化 RSA

Initializing RSA from String

我正在尝试解密一些用 RSA 加密的文本,我有 public 密钥来执行此操作

`

-----BEGIN RSA PUBLIC KEY-----
MIGWAoGBAMqfGO9sPz+kxaRh/qVKsZQGul7NdG1gonSS3KPXTjtcHTFfexA4MkGA
mwKeu9XeTRFgMMxX99WmyaFvNzuxSlCFI/foCkx0TZCFZjpKFHLXryxWrkG1Bl9+
+gKTvTJ4rWk1RvnxYhm3n/Rxo2NoJM/822Oo7YBZ5rmk8NuJU4HLAhAYcJLaZFTO
sYU+aRX4RmoF
-----END RSA PUBLIC KEY-----

`

如何将其加载到 RSACryptoServiceProvider 中,因为它只能从 XMLString 加载,我不知道如何将其转换为 Xml 格式

密钥大小为 128

我尝试使用以下代码对其进行初始化

public byte[] Decrypt128(byte[] input)
{
    RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(128);
    rsa.ImportCspBlob(Encoding.ASCII.GetBytes(_longKey));
    return rsa.Decrypt(input, true);
}

_longKey是BEGIN和END之间的内容,也包括BEGIN和END,bot Bad Version of provider.

这不是 How do you convert Byte Array to Hexadecimal String, and vice versa?

的重复问题

我已经知道如何将字节转换为十六进制以及如何将十六进制转换为字节,但是这对我初始化没有任何帮助 RSACryptoServiceProvider 也许可以举个例子告诉我这有什么帮助,但目前还没有

您可以使用 BouncyCastle,它有一个 PemReader 允许您提取密钥的模数和指数:

using (var reader = File.OpenText("mykey.key"))
{
    var pem = new PemReader(reader);
    var o = (RsaKeyParameters)pem.ReadObject();
    using (var rsa = new RSACryptoServiceProvider())
    {
        var parameters = new RSAParameters();
        parameters.Modulus = o.Modulus.ToByteArray();
        parameters.Exponent = o.Exponent.ToByteArray();
        rsa.ImportParameters(parameters);

        // Do what you need to do with the RSACryptoServiceProvider instance
    }
}

如果您不想在项目中依赖 BouncyCastle,使用此方法将 public 密钥加载到 RSACryptoServiceProvider 后,您可以将其导出到 XML供将来使用:

string xml = rsa.ToXmlString(false);
File.WriteAllText("mykey.xml", xml);