RSACryptoServiceProvider 密钥大小 1024 未生成 128 字节密钥 [关闭]

Posted

技术标签:

【中文标题】RSACryptoServiceProvider 密钥大小 1024 未生成 128 字节密钥 [关闭]【英文标题】:RSACryptoServiceProvider keysize 1024 is not generating a 128 byte key [closed] 【发布时间】:2019-10-10 22:38:38 【问题描述】:

我有以下代码:

byte[] rsaKey;

using (var rsa = new RSACryptoServiceProvider(1024))

    rsaKey = rsa.ExportCspBlob(false);

结果是rsaKey的长度是148字节而不是128

这是为什么呢?

我必须将公钥rsaKey 传递给其他系统,以便其他系统加密一些数据,然后这些数据将再次发送给我。

我必须使用什么密钥来解密?

【问题讨论】:

密钥的长度为 128,但 ExportScpBlob 导出所有需要进行加密/解密的参数。请查看 struct RSAParameters。我认为其中一些数据也被导出。不仅是钥匙。 @Hostel 好的,所以其他系统需要这些参数才能使用我的公钥进行加密,对吗? 是的,但请记住,您需要导出这些参数,但不是全部。只有公钥和与公钥相关的操作所需的参数。这里有一些很好的例子:docs.microsoft.com/en-us/dotnet/api/… 【参考方案1】:

RSA 的密钥大小不是编码公钥的大小。非对称算法的密钥大小是与安全强度直接相关的值。对于 RSA,即模数的大小,因为模数分解是攻击 RSA 的方式。

公钥由 128 字节的模数和一个公共指数组成,因此根据定义它已经大于密钥大小(尽管公共指数通常只是设置为 0x010001 或 65537,Fermat 的第五个素数.

为此专有 Microsoft 格式添加附加信息,您将获得 148 个字节。由于 148 - 128 - 3 是 17,因此您预计会有 17 个字节的开销。


要解密,您必须使用私钥。我不知道为什么不清楚,这与另一个问题有什么关系。

【讨论】:

以上是关于RSACryptoServiceProvider 密钥大小 1024 未生成 128 字节密钥 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

RSACryptoServiceProvider 工作正常吗?

如何使用先前使用 RSACryptoServiceProvider 加密的 RSACng 解密数据

如何提取 RSACryptoServiceProvider 生成的素数?

C# - RSACryptoServiceProvider - 错误:错误数据

从公钥正确创建 RSACryptoServiceProvider

这个 C# RSACryptoServiceProvider 方法的红宝石等价物是啥