首页 > 解决方案 > RSACryptoServiceProvider 密钥大小 1024 未生成 128 字节密钥

问题描述

我有以下代码:

byte[] rsaKey;

using (var rsa = new RSACryptoServiceProvider(1024))
{
    rsaKey = rsa.ExportCspBlob(false);
}

结果是 的长度rsaKey148字节而不是128

这是为什么?

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

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

标签: c#cryptographyrsacryptoserviceprovider

解决方案


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

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

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


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


推荐阅读