【问题标题】:RSACryptoServiceProvider keysize 1024 is not generating a 128 byte key [closed]RSACryptoServiceProvider 密钥大小 1024 未生成 128 字节密钥 [关闭]
【发布时间】: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/…

标签: c# cryptography rsacryptoserviceprovider


【解决方案1】:

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

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

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


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 2010-09-21
    相关资源
    最近更新 更多