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 - 错误:错误数据