1

我正在检查用 Python 编写的用于生成 RSA 公钥私钥对的代码。

然而,它会生成密钥对,在代码结束时它会再次运行 ssh-keygen。我不确定为什么要这样做。因为,RSA.generate() 将自己生成我们导出到两个单独文件中的密钥对。为什么需要再次运行 ssh-keygen?

以下是代码中的几行:

keypair = RSA.generate(1024, randfunc)

with open("pub", "w") as pubfile, open("id_rsa", "w") as privfile:
    privfile.write(keypair.exportKey())
    pubfile.write(keypair.publickey().exportKey())

system("ssh-keygen -m PKCS8 -i -f pub > id_rsa.pub && rm pub")

文件pub将存储公钥,id_rsa将存储来自 RSA.generate() 函数生成的密钥对的私钥。

现在,为什么它在最后运行 ssh-keygen 命令?

此外,它不接受任何输入文件作为 -i 参数,而 -f 参数采用名称 pub,它是已经生成的公钥。

执行代码后,我得到两个文件,id_rsa 和 id_rsa.pub

id_rsa 是使用 RSA.generate() 生成的私钥,但 id_rsa.pub 存储 ssh-keygen 命令的结果。

我需要一些帮助来理解在脚本末尾调用 ssh-keygen 的原因以及传递给 ssh-keygen 的参数。-i 应该传递一些值,并且 -f 应该有输出文件名而不是输入。

注意:我读到这样做是为了使用 ssh-keygen 将公钥从 OpenSSL 格式转换为 OpenSSH 格式,以便它以 ssh-rsa 而不是 BEGIN PUBLIC KEY 开头。

这是否意味着相应私钥的格式也应该改变?

既然开始了,

开始私钥

4

1 回答 1

0

运行 ssh-keygen 以将生成的 PEM 格式公钥转换为 OpenSSH 格式公钥这一事实是正确的。
据我所知,在 Python 中没有真正好的方法可以做到这一点。

OpenSSH 格式仅针对公钥存在。所以,不,如果私钥以或
开头,则不需要转换私钥
-------- BEGIN PRIVATE KEY ----------------- BEGIN RSA PRIVATE KEY ---------

于 2013-08-31T01:50:34.837 回答