2013-07-05 41 views
1

我正在检查用Python编写的用于生成RSA公共私钥对的代码。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") 

文件酒馆将存储的公钥和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开头。

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

因为它开始,

BEGIN PRIVATE KEY

回答

0

你处于一个SSH-凯基运行所产生的PEM格式公共密钥转换为OpenSSH格式公共密钥的事实是正确的。
据我所知,在Python中没有真正好的方法来做到这一点。

OpenSSH格式只存在公钥。
所以,不,你不需要私钥转换,如果它与
-------- BEGIN PRIVATE KEY ----------------- BEGIN RSA PRIVATE KEY ---------

开始