我正在编写一个使用Exponents中有16个字节的公钥的软件
我有以下代码
string longKey = @"-----BEGIN RSA PUBLIC KEY-----
MIGWAoGBAMqfGO9sPz+kxaRh/qVKsZQGul7NdG1gonSS3KPXTjtcHTFfexA4MkGA
mwKeu9XeTRFgMMxX99WmyaFvNzuxSlCFI/foCkx0TZCFZjpKFHLXryxWrkG1Bl9+
+gKTvTJ4rWk1RvnxYhm3n/Rxo2NoJM/822Oo7YBZ5rmk8NuJU4HLAhAYcJLaZFTO
sYU+aRX4RmoF
-----END RSA PUBLIC KEY-----";
using (var reader = new StringReader(longKey))
{
var pem = new PemReader(reader);
var o = (RsaKeyParameters)pem.ReadObject();
using (var rsa = new RSACryptoServiceProvider())
{
var parameters = new RSAParameters
{
Modulus = o.Modulus.ToByteArray(),
Exponent = o.Exponent.ToByteArray()
};
rsa.ImportParameters(parameters);
//other code is here that uses the rsa
}
}
该密钥与某些条形码一起使用并提供给我,但也可在其他不同网站上在线获取
我面临的问题是ImportParameters
提供了一个例外,在研究后我只发现“坏数据”我发现RSACryptoServiceProvider在Exponents中只使用了4个字节,但这个公钥在指数中有16个字节。如果我将Exponent设为静态字节数组1,0,1那么ImportParameters
可以工作,但显然我的其余代码都失败了
我可以使用其他方法来使用此密钥,例如C ++,还是可以在C#中完成。我不是RSA加密方面的专家
答案 0 :(得分:1)
如果您使用的是.NET 4.6或更高版本,则可以使用RSACng
作为RSACryptoServiceProvider
的替代品。
它有一个不幸的支持矩阵:
RSACng对Exponent
值的大小没有4字节的限制。