所以我正在生成 2048 RSA key 对。但是当我查看私钥时,长度只有 1232 字节。这与 2048 有什么关系还是 2048 只是模数大小?
最佳答案
RSA key 的大小以位表示,而不是字节。 2048 位是 256 字节。
一个简单的 RSA 私钥由两个整数组成,模(一个大的复合整数,其以位为单位的长度是“RSA key 长度”)和私有(private)指数(另一个大整数,通常与模数具有相同的大小)。然而,模数和私有(private)指数有一些内部结构,了解该结构的详细信息可以加快实现速度(大约是 4 倍)。因此,RSA 私钥通常包含更多数据。
即,如果模数为n并且是两个素数p和q的乘积,则私钥包括:
- 模数n(2048 位 key 为 256 字节)
- 公共(public)指数e(很小,通常为 65537,即可以通过 3 或 4 个字节进行编码)
- 私有(private)指数d(约256字节)
- 因子p和q(每个128字节)
- d 减少模 p-1(128 字节)
- d 减少模 q-1(128 字节)
- 1/q mod p(q 模 p 的倒数;128 字节)
总计约 1160 字节。然后编码会产生一些开销,因为所有这些整数的长度可能略有不同(例如,没有什么真正要求 p 和 q 具有完全相同的大小;此外,e 可能大于该值)。标准结构使用 ASN.1,这意味着到处都有一些额外的字节。将结构包装成更大的结构也很常见,该结构也将 key 标识为 RSA 的 key 。 1232 字节与以 PKCS#8 格式编码的 2048 位 RSA key 兼容。
有关 RSA 的详细信息,请查看 PKCS#1 .
关于cryptography - 私钥长度字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5403808/