如何使用pyasn1解析ec公共?
from pyasn1.codec.der import decoder
import base64
raw2='''
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/FU6/Om2m5EnxDwGSVO+YNXorpDtzutLtCAMTZR5
NIs6pfKx9oyjpS5aURx4BinuW8dr8K7N2oafY1TNvc41oQ==
'''
der = decoder.decode(base64.b64decode(raw2))
print der
'''
der:
(Sequence().setComponentByPosition(0, Sequence().setComponentByPosition(0, ObjectIdentifier(1.2.840.10045.2.1)).setComponentByPosition(1, ObjectIdentifier(1.2.840.10045.3.1.7))).setComponentByPosition(1, BitString("'0000010011111100010101010011101011111100111010011011011010011011100100010010011111000100001111000000011001001001010100111011111001100000110101011110100010101110100100001110110111001110111010110100101110110100001000000000110001001101100101000111100100110100100010110011101010100101111100101011000111110110100011001010001110100101001011100101101001010001000111000111100000000110001010011110111001011011110001110110101111110000101011101100110111011010100001101001111101100011010101001100110110111101110011100011010110100001'B")), '')
'''是否有可能在pyasn1中得到类似于pyasn1的东西。
编辑:i基于这获得以下信息:
class curve(univ.Sequence):
componentType = namedtype.NamedTypes(
namedtype.NamedType('public KeyType',univ.ObjectIdentifier()),
namedtype.NamedType('curveName',univ.ObjectIdentifier())
)
class EcPublicKey(univ.Sequence):
componentType = namedtype.NamedTypes(
namedtype.NamedType('curve', curve()),
namedtype.NamedType('publicKeyValue', univ.BitString())
)
pubKey,rest = decoder.decode(base64.b64decode(raw2), asn1Spec = EcPublicKey())
print(pubKey.prettyPrint())
'''
EcPublicKey:
curve=curve:
public KeyType=1.2.840.10045.2.1
curveName=1.2.840.10045.3.1.7
publicKeyValue="'0000010011111100010101010011101011111100111010011011011010011011100100010010011111000100001111000000011001001001010100111011111001100000110101011110100010101110100100001110110111001110111010110100101110110100001000000000110001001101100101000111100100110100100010110011101010100101111100101011000111110110100011001010001110100101001011100101101001010001000111000111100000000110001010011110111001011011110001110110101111110000101011101100110111011010100001101001111101100011010101001100110110111101110011100011010110100001'B"
'''发布于 2014-02-22 21:05:39
repr()提供Python代码,一旦计算,它将生成相同的对象。对于面向人的表示,使用.prettyPrint()方法(任何pyasn1对象):
publicKey, restOfInput = decoder.decode(base64.b64decode(raw2))
print publicKey.prettyPrint()顺序:
=顺序:
=1.2.840.10045.2.1
=1.2.840.10045.3.1.7
="'0000010011111100010101010011101011111100111010011011011010011011100100010010011111000100001111000000011001001001010100111011111001100000110101011110100010101110100100001110110111001110111010110100101110110100001000000000110001001101100101000111100100110100100010110011101010100101111100101011000111110110100011001010001110100101001011100101101001010001000111000111100000000110001010011110111001011011110001110110101111110000101011101100110111011010100001101001111101100011010101001100110110111101110011100011010110100001'B“
发布于 2014-02-22 20:34:31
pyasn1似乎没有提供更好的格式,所以您必须按照__repr__方法的模式来实现它(参见AbstractSimpleAsn1Item和http://pyasn1.cvs.sourceforge.net/viewvc/pyasn1/pyasn1/pyasn1/type/base.py?revision=1.35&view=markup中的AbstractConstructedAsn1Item )。
发布于 2017-04-20 16:03:08
如果希望访问公钥本身的值,则可以使用隐穹顶库。只需在文件public.pem中格式化数据:
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/FU6/Om2m5EnxDwGSVO+YNXorpDtzutLtCAMTZR5
NIs6pfKx9oyjpS5aURx4BinuW8dr8K7N2oafY1TNvc41oQ==
-----END PUBLIC KEY-----然后在Python中:
from Crypto.PublicKey import ECC
print(ECC.import_key(open('public.pem').read()))x=114133426963296850915436792023241197556938624347236768937730916445384676553867,y=26527350004009046719864726291814153938182054558131723928772218772465776473505) (曲线=‘P-256’,EccKey)
https://stackoverflow.com/questions/21954512
复制相似问题