C# RSA导入手动RSAParams失败,数据错误

C# RSA导入手动RSAParams失败,数据错误,c#,rsa,C#,Rsa,我整个上午都在做这件事,但仍然不知道我错过了什么 我正在尝试使用自己生成的值执行RSA加密。有几个这样的帖子,有几个让我走得更远。一些同样的帖子让OP放弃并使用BouncyCastle或其他东西,而有答案和评论说它确实有效。因此,我决心学习他们所知道的,让.Net服务提供商工作起来 为此,我这里有一个简单的小示例,我甚至无法获取要导入的参数 我还没有发布用于生成和测试素性或e值的代码。我可以,如果需要的话,但我不认为这是细分,因为这是相当股票代码 BigInteger p = BigIntege

我整个上午都在做这件事,但仍然不知道我错过了什么

我正在尝试使用自己生成的值执行RSA加密。有几个这样的帖子,有几个让我走得更远。一些同样的帖子让OP放弃并使用BouncyCastle或其他东西,而有答案和评论说它确实有效。因此,我决心学习他们所知道的,让.Net服务提供商工作起来

为此,我这里有一个简单的小示例,我甚至无法获取要导入的参数

我还没有发布用于生成和测试素性或e值的代码。我可以,如果需要的话,但我不认为这是细分,因为这是相当股票代码

BigInteger p = BigInteger.Parse("17234...948417"); //Large Prime A
BigInteger q = BigInteger.Parse("16750...157759"); //Large Prime B
BigInteger n = BigInteger.Multiply(p, q); //Modulus
BigInteger e = BigInteger.Parse("16168...372355");

RSAParameters _rsaParams new RSAParameters();
_rsaParams.Modulus = n.ToByteArray();
_rsaParams.Exponent = e.ToByteArray();

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.ImportParameters(_rsaParms);

当然也有例外


好的,根据@Iridium的回答,我加倍计算了公共指数,我确实做错了,因此得出的公共指数太大了。在我对正确方法的研究中,我发现这个非常有用的站点可以计算指数,通过指数我可以检查自己并发现错误


我记得,
rsacyptoserviceprovider
不接受导入参数中大于4字节的
指数
(即使字节数组表示的数字适合较小的字段,即通过添加前导零字节)。您的指数似乎是129字节,这显然超过了这个限制


如果您使用的指数实际上是私有指数,那么让它与.NET
rsacyptoserviceprovider
一起工作的唯一方法是正确填写其余字段(
p
Q
DP
DQ
InverseQ
),并将
指数设置为通常更小的公共指数。

该指数是公钥指数。