c# - RSACryptoServiceProvider 密钥大小 1024 未生成 128 字节密钥
问题描述
我有以下代码:
byte[] rsaKey;
using (var rsa = new RSACryptoServiceProvider(1024))
{
rsaKey = rsa.ExportCspBlob(false);
}
结果是 的长度rsaKey
是148字节而不是128。
这是为什么?
我必须将公钥传递rsaKey
给其他系统,以便其他系统加密一些数据,然后这些数据将再次发送给我。
我必须使用什么密钥来解密?
解决方案
RSA 的密钥大小不是编码公钥的大小。非对称算法的密钥大小是与安全强度直接相关的值。对于 RSA,它是模数的大小,因为模数分解是攻击 RSA 的方式。
公钥由 128 字节的模数和一个公共指数组成,因此根据定义它已经大于密钥大小(尽管公共指数通常只是设置为0x010001
65537,即 Fermat 的第五个素数。
添加此专有Microsoft 格式的附加信息,您将获得 148 个字节。由于 148 - 128 - 3 是 17,因此您预计会有 17 个字节的开销。
要解密,您必须使用私钥。我不知道为什么这不清楚,这与另一个问题有什么关系。
推荐阅读
- numpy - 从 top_k 函数返回到图像
- mysql - Mysql 两个动作之间时间差的总和
- tfs - VSTS [SONAR] - 错误:无法对不在映射的 TFS 工作区中的以下文件进行 TFS 注释
- c++ - 指定复制构造函数不用作复制构造函数
- c - 将字符串存储在另一个字符串的指针数组中
- coldfusion - 如何在 Coldfusion 11 中设置和检查会话?
- wordpress - 我可以使用 Wordpress API 从其他网站推送和拉取数据吗?
- java - 通过带有参数表的注释选择 CDI bean
- javascript - 绑定数组的对象数组
- android - CardViews 未显示在 RecyclerView 中