Openssl RSA密钥大小

时间:2016-03-24 09:23:34

标签: ssl openssl key

我已通过此命令生成了RSA密钥:

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

我将密钥导出为DER格式,这是二进制格式。关键是超过2k位的waaay。为了测试,我将公钥导出为DER格式,略大于2k位。

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

谢谢, 列夫

2 个答案:

答案 0 :(得分:0)

编辑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:

此外,我从未见过提取私钥的原因(或甚至以你的方式生成私钥)。

您希望实现的目标是什么?

答案 1 :(得分:0)

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

通常使用耦合(模数,公共指数)和使用耦合(模数,私有指数)的解密来执行加密。

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

使用2048位RSA密钥,私有指数正好是2048位,以及模数。

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

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

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

在恢复中,要存储2048位私钥,您需要4096位(512字节)。要存储公钥,您需要2048位(256字节)。