OpenSSL RSA 密钥大小

Openssl RSA key size

我已经通过这个命令生成了一个 RSA 密钥:

openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048

我把密钥导出为DER格式,也就是二进制形式。密钥是 waaay 超过 2k 位。为了测试,我将 public 密钥导出为 DER 格式,略多于 2k 位。

那么问题来了,什么是2048位?如何从生成的文件中获取原始位?

谢谢, 列夫

编辑 3 / 4:

我还没有找到一种方便的方法来做到这一点。无论如何,您可以尝试以下方法:

openssl rsa -in <yourfile> -noout -text

它将显示有关私钥的更多信息。检查 wikipedia 如何使用给定信息计算密钥。

旧解决方案(不起作用,所以忽略它)

用于自动化流程还是仅用于教育目的?

手动方法可能如下(假设您是 linux 用户):

  • 复制密钥文件

  • 用 vi(m) 打开你的 pem 文件并删除第一行和最后一行 (BEGIN/END PRIVATE KEY)

  • 去除换行符(例如:%s/\n//g)

  • 保存文件

  • 现在base64解码文件(base64 -d [your file name here] > [destination])

但很可能 openssl 提供了一种更方便的方式来实现这个目标

编辑 1:

如果 pem / der 存储密钥以外的其他信息,这可能是错误的。

编辑 2:

此外,我还没有找到提取私钥的理由(或者甚至以您的方式生成私钥)。

你想达到的目标是什么?

为了使用 RSA 密钥加密和解密,您需要模数、私有和 public 指数。

通常使用对(模数,public指数)进行加密,使用对(模数,私有指数)进行解密。

现在在某些实现中,例如通常在嵌入式设备上,public 指数默认设置为称为 F4 的数字,即十进制的 0x10001 或 65537。

对于 2048 位的 RSA 密钥,私有指数和模数正好是 2048 位。

您可以通过一些字符串操作获得二进制格式的私有指数:

openssl rsa -in key.der -inform der -text -noout | awk '/^[^ ]/{if( == "privateExponent:") {dump=1} else {dump=0}} /^ /{if(dump==1){gsub(":","");printf "%s", }}END{print ""}' | xxd -ps -r -c256 > pr_key.bin

您也可以通过替换awk命令中的字符串来获取模数。

在简历中,要存储您的 2048 位私钥,您需要 4096 位(512 字节)。要存储 public 密钥,您需要 2048 位(256 字节)。