【问题标题】:RSA Import manual RSAParams failing with bad data errorRSA 导入手动 RSAParams 因数据错误而失败
【发布时间】:2014-11-12 18:50:32
【问题描述】:

我整个上午都在做这个,但仍然无法弄清楚我错过了什么。

我正在尝试使用我自己生成的值执行 RSA 加密。有几个关于这个的帖子,有几个让我走得更远。其中一些相同的帖子让 OP 放弃并使用 BouncyCastle 或其他东西,而有答案和 cmets 说它确实有效。所以我有点决心了解他们所知道的并让 .Net RSACryptoServiceProvider 正常工作。

为此,我在这里有一个简单的小示例,我什至无法导入 RSAParameters。

我还没有发布用于生成和测试素数或我的 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 的回答,我加倍了解我是如何计算公共指数的,但我确实做错了,因此得出了太大的公共指数。在我对正确方法的研究中,我发现这个非常有用的网站可以计算指数,通过它我能够检查自己并找到我的错误。

http://nmichaels.org/rsa.py

【问题讨论】:

    标签: c# rsa


    【解决方案1】:

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

    如果您使用的指数实际上是私有指数,那么让它与 .NET RSACryptoServiceProvider 一起工作的唯一方法是填写其余字段(P、@987654325 @、DPDQInverseQ) 正确,并将Exponent 设置为通常小得多的公共指数。

    【讨论】:

    • 指数是公钥指数。
    猜你喜欢
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多