我正在尝试解密一些用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.
或许可以举例说明这有什么用呢,但此时它并没有帮助我
答案 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);