我通过以下命令生成了一个RSA密钥:
openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048
我将密钥导出为DER格式,这是二进制形式。该密钥有超过2k位。为了测试,我将公钥导出为稍微超过2k位的DER格式。
所以问题是,2048位是什么?我如何从生成的文件中获取原始位?
谢谢, Lev
我通过以下命令生成了一个RSA密钥:
openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits: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字节)。
编辑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]
)
-----BEGIN X-----
和-----END X-----
)的换行符,则密钥可能无法解析,您可能会收到***PEM_read_bio:no start...
***错误。 - jww