使用Python从私钥输入中提取公钥publickeykey
问题描述:
我需要从私钥生成公钥,没有临时位置,就像我们在sshgen中做的一样。所以我使用this.Here传递我的私钥作为输入像这样(执行时):使用Python从私钥输入中提取公钥publickeykey
python codekey.py "-----BEGIN RSA PRIVATE KEY-----\nMIhhhhhhhhhhhhhhhh......Bidqt/YS3/0giWrtv+rMkJtv8n\nmirJ+16SZodI5gMuknvZG....................n-----END RSA PRIVATE KEY-----"
我的代码(codekey.py):
import sys
import io
from twisted.conch.ssh import keys
k = sys.argv[1]
rsa = keys.RSA.importKey(k)
key = keys.Key(rsa)
ssh_public = key.public().toString("openssh")
print ssh_public
错误:
Traceback (most recent call last):
File "codekey.py", line 7, in <module>
rsa = keys.RSA.importKey(k)
File "/usr/lib/python2.7/dist-packages/Crypto/PublicKey/RSA.py", line 638, in importKey
if lines[1].startswith(b('Proc-Type:4,ENCRYPTED')):
IndexError: list index out of range
Dyanam当我执行我的python脚本时,我需要传递如上所示的关键值,并从中产生公钥。它是否可能??我不需要在本地存储,因为对于priveleges和关键证券,不想破解。
答
这里是你如何能做到这一点:
如果你已经有了私钥,你基本上可以做一个私钥物体,然后简单地使用作为从中提取公钥:
public_key = private_key.publickey().exportKey('PEM')
假设private_key是您的私钥对象。
如果你没有这个对象,从编码的PEM获得它的一种方式(PKCS#1)私有密钥文件(如您在上面你的问题都给予)会是这样的:
from Crypto.PublicKey import RSA
from base64 import b64decode
pem_key = b'your private key in PEM'
key = b64decode(pem_key)
keyPriv = RSA.importKey(key)
# key now has all the components of the private
print keyPriv.keydata
modulusN = keyPriv.n
pubExpE = keyPriv.e
priExpD = keyPriv.d
primeP = keyPriv.p
primeQ = keyPriv.q
private_key = RSA.construct((modulusN, pubExpE, priExpD, primeP, primeQ))
,然后一旦你在PRIVATE_KEY objectdo的私钥:
public_key = private_key.publickey().exportKey('PEM')
+0
如果您在导入'from Crypto.PublicKey import RSA'时遇到问题,请尝试使用easy_install安装pycrypto: 'pip uninstall pycrypto easy_install pycrypto' – E235
查看源代码,它看起来并不像私有密钥的该格式支持。此外,您应该使用conch.keys.Key.fromString()以可接受的格式导入密钥。 –
谢谢詹姆斯,但我错过了什么,我知道我在这一行中做了一些错误rsa = keys.RSA.importKey(k)。因为我需要得到我的私钥作为输入,而不是获取pem文件并提取公共密钥从它。它可能????如果我们使用sshkeygen它本地存储密钥。我不希望出于安全原因。 – Doefi