2013-07-05 42 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 ---------

開始