从String初始化RSA

时间:2017-01-08 08:51:55

标签: c# rsa

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

`

input

`

如何将其加载到-----BEGIN RSA PUBLIC KEY----- MIGWAoGBAMqfGO9sPz+kxaRh/qVKsZQGul7NdG1gonSS3KPXTjtcHTFfexA4MkGA mwKeu9XeTRFgMMxX99WmyaFvNzuxSlCFI/foCkx0TZCFZjpKFHLXryxWrkG1Bl9+ +gKTvTJ4rWk1RvnxYhm3n/Rxo2NoJM/822Oo7YBZ5rmk8NuJU4HLAhAYcJLaZFTO sYU+aRX4RmoF -----END RSA PUBLIC KEY----- 中,因为这只能从XMLString加载,我不知道如何将其转换为Xml格式

密钥大小为128

我尝试使用以下代码初始化它

RSACryptoServiceProvider

_longKey是BEGIN和END之间的内容,还包括BEGIN和END,bot public byte[] Decrypt128(byte[] input) { RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(128); rsa.ImportCspBlob(Encoding.ASCII.GetBytes(_longKey)); return rsa.Decrypt(input, true); }

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

的重复问题

我已经知道如何将字节转换为十六进制和十六进制转换为字节,但这无论如何都无法帮我初始化Bad Version of provider.或许可以举例说明这有什么用呢,但此时它并没有帮助我

1 个答案:

答案 0 :(得分:2)

您可以使用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,那么使用此方法将公钥加载到RSACryptoServiceProvider后,您可以将其导出为XML以供将来使用:

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