在python中以PEM格式精确提取公钥为“Decimal”
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在python中以PEM格式精确提取公钥为“Decimal”相关的知识,希望对你有一定的参考价值。
我试图达到PEM公钥的十进制格式的确切点。不在Pem。
首先,我使用我的PEM证书
from socket import socket
import ssl
from OpenSSL import SSL
import string
import traceback
import json
import re
for i in file_content:
final_list.append(i.strip())
file = open("SSL_out_put.json","w")
Temp_Priv_Key_list = []
counter = 1
for i in final_list[:4047]:
print counter
print i
counter = counter + 1
try:
x = ssl.get_server_certificate((i, 443))
Temp_Priv_Key_list.append({
'counter' : counter,
'i' : i,
'x' : x
})
content = json.dumps(Temp_Priv_Key_list, indent=3)
file.write(content)
Temp_Priv_Key_list=[]
except Exception , err:
pass
print Exception , err
file.close()
之后,我使用“from pyasn1_modules import pem,rfc2459”来提取publick键。这将为公钥提供二进制表示。转换十进制后我重新说这不是我想要使用的。请注意,在我的实验中,pyasc1无法正常工作。
经过大量研究后,我发现这里的代码仍以PEM格式提取公钥。
from cryptography import x509
from cryptography.hazmat.backends import default_backend
with open("cert.pem", "rb") as f:
cert = f.read()
cert = str(cert)
x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert)
key_data = (OpenSSL.crypto.dump_publickey(OpenSSL.crypto.FILETYPE_PEM,x509.get_pubkey()))
print key_data
现在我仍然将我的Publick键作为Pem格式。经过一些其他的研究,我发现了这个,但只给出了这个输出仍然无法提取十进制或二进制格式的publick键。
from Crypto.PublicKey import RSA
from base64 import b64decode
from Crypto.Util import asn1
with open("public_key.pem", "rb") as f:
cert = f.read()
#print cert
keyDER = b64decode(cert)
keyPub = RSA.importKey(keyDER)
print keyPub}
这段代码将为您提供<_RSAobj @ 0x7f65559da320 n(2048)的输出,e>
这是我的第一个问题。对不起,如果我不正确。我的大脑充满了各种各样的垃圾编码,现在无法理解。有人可以帮我解决这个问题。
我发现http://lapo.it/asn1js/我确实需要它,但我不能在python中使用它。我可以使用硒或scrapy来提取我想要的数据。但这真的会杀了我。应该有一种方法,我尝试过:
我试过这个主题的那些模块:
from pyasn1_modules import pem, rfc2459
from pyasn1.codec.der import decoder
from cryptography import x509
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa
#import pem
import socket, ssl
import OpenSSL
顺便问一下谁和我一起鼓励这个问题。 pycrypto在Windows上没有正常工作(虽然我安装了VCPython2.7.msi“你会知道我的意思,如果你会尝试它”)我将它切换到virtual-ubuntu。谢谢。
Python ssl lib对于这个问题并不强大。所以我把整个事情改为linux终端上的OPENSSL。
timeout 3s openssl s_client -servername (site_name) -connect (site_name):443 -no_alt_chains
由于s_client支持SNI,这将为您提供PEM所提供的内容。
openssl x509 -in outer.pem -text
有了这个你将得到你的PEM文件的所有同伴。如果你想要你完全得到公钥模数,它会给你十六进制。
openssl x509 -in outer.pem -modulus -noout
一点点子进程,您可以轻松地从终端输出获取输出文件,并使用一点正则表达式,您将获得所需的一切。 Ty openssl。我希望我可以帮助那些阅读此内容的人。
以上是关于在python中以PEM格式精确提取公钥为“Decimal”的主要内容,如果未能解决你的问题,请参考以下文章