我已通过此命令生成了RSA密钥:
openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048
我将密钥导出为DER格式,这是二进制格式。关键是超过2k位的waaay。为了测试,我将公钥导出为DER格式,略大于2k位。
所以问题是,2048位是什么?如何从生成的文件中获取原始位?
谢谢, 列夫
答案 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字节)。