RSACryptoServiceProvider 密钥大小 1024 未生成 128 字节密钥
RSACryptoServiceProvider keysize 1024 is not generating a 128 byte key
我有以下代码:
byte[] rsaKey;
using (var rsa = new RSACryptoServiceProvider(1024))
{
rsaKey = rsa.ExportCspBlob(false);
}
结果是 rsaKey
的长度是 148 字节而不是 128。
这是为什么?
我必须将 public 密钥 rsaKey
传递给其他系统,以便其他系统加密一些数据,然后这些数据将再次发送给我。
我必须使用什么密钥来解密?
RSA 的密钥大小 而不是 编码的 public 密钥的大小。非对称算法的密钥大小是一个与安全强度直接相关的值。对于 RSA,这是模数的大小,因为模数分解是攻击 RSA 的方式。
public 密钥由 128 字节的模数和一个 public 指数组成,因此根据定义它已经大于密钥大小(尽管 public 指数通常是只需设置为 0x010001
或 65537,费马的第五个素数。
为此 专有 Microsoft 格式添加附加信息,您将达到 148 字节。由于 148 - 128 - 3 是 17,因此您预计有 17 个字节的开销。
要解密,您必须使用私钥。我不知道为什么不清楚,这与另一个问题有什么关系。
我有以下代码:
byte[] rsaKey;
using (var rsa = new RSACryptoServiceProvider(1024))
{
rsaKey = rsa.ExportCspBlob(false);
}
结果是 rsaKey
的长度是 148 字节而不是 128。
这是为什么?
我必须将 public 密钥 rsaKey
传递给其他系统,以便其他系统加密一些数据,然后这些数据将再次发送给我。
我必须使用什么密钥来解密?
RSA 的密钥大小 而不是 编码的 public 密钥的大小。非对称算法的密钥大小是一个与安全强度直接相关的值。对于 RSA,这是模数的大小,因为模数分解是攻击 RSA 的方式。
public 密钥由 128 字节的模数和一个 public 指数组成,因此根据定义它已经大于密钥大小(尽管 public 指数通常是只需设置为 0x010001
或 65537,费马的第五个素数。
为此 专有 Microsoft 格式添加附加信息,您将达到 148 字节。由于 148 - 128 - 3 是 17,因此您预计有 17 个字节的开销。
要解密,您必须使用私钥。我不知道为什么不清楚,这与另一个问题有什么关系。