我有一个具有以下值的标记:Tag(nr=16, typ=32, cls=0)
这些价值观中的每一个都意味着什么
基于https://en.wikipedia.org/wiki/X.690#Types,我认为typ=32应该表示一天中的时间,但这在我的上下文中没有意义
那么,我的背景是什么?我很高兴你问我!我正在解包使用以下内容创建的ECDH_SECP256R1私钥:
>>> import asn1
>>> from Crypto.IO.PKCS8 import unwrap
>>> import binascii
>>> from CryptoMobile.EC import *
>>> ec_B = ECDH_SECP256R1()
>>> ec_B.get_privkey()
b'0\x81\x87\x02\x01\x000\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x04m0k\x02\x01\x01\x04 Wj\x80L\t\xc5\xa1oW\xd9\xbbFs{TH\xea\xe1*\x9a\x95\xf6\xe1\xd1\xe1\x9a%\xc8\xb7\xb3~h\xa1D\x03B\x00\x04\xf0T\xear^x\xb6\xa8\xe8\x04T \xf1\xbe\x81\xac\xba\xfdJ\xa10Y_\x0b\xb5^\x140\xaf\xa1S\x14|@\xfaV\x08\x15\x05Cr\xa7\xd1F\xcevq(H\x8a\x8d\xa2\xce\x84\xaa<\x0b>\xf5\xe0\xf1\xed\x9f\x90'
>>> unwrap(ec_B.get_privkey())
('1.2.840.10045.2.1', b'0k\x02\x01\x01\x04 Wj\x80L\t\xc5\xa1oW\xd9\xbbFs{TH\xea\xe1*\x9a\x95\xf6\xe1\xd1\xe1\x9a%\xc8\xb7\xb3~h\xa1D\x03B\x00\x04\xf0T\xear^x\xb6\xa8\xe8\x04T \xf1\xbe\x81\xac\xba\xfdJ\xa10Y_\x0b\xb5^\x140\xaf\xa1S\x14|@\xfaV\x08\x15\x05Cr\xa7\xd1F\xcevq(H\x8a\x8d\xa2\xce\x84\xaa<\x0b>\xf5\xe0\xf1\xed\x9f\x90', b'\x06\x08*\x86H\xce=\x03\x01\x07')
>>>
>>>
>>> decoder = asn1.Decoder()
>>> decoder.start(unwrap(ec_B.get_privkey())[1])
>>> tag, value = decoder.read()
>>> tag
Tag(nr=16, typ=32, cls=0)
>>> value
b'\x02\x01\x01\x04 Wj\x80L\t\xc5\xa1oW\xd9\xbbFs{TH\xea\xe1*\x9a\x95\xf6\xe1\xd1\xe1\x9a%\xc8\xb7\xb3~h\xa1D\x03B\x00\x04\xf0T\xear^x\xb6\xa8\xe8\x04T \xf1\xbe\x81\xac\xba\xfdJ\xa10Y_\x0b\xb5^\x140\xaf\xa1S\x14|@\xfaV\x08\x15\x05Cr\xa7\xd1F\xcevq(H\x8a\x8d\xa2\xce\x84\xaa<\x0b>\xf5\xe0\xf1\xed\x9f\x90'
我认为标签告诉我如何理解价值。或者Python已经理解了标记中的值?这是最终的解码值吗
>>> print(binascii.hexlify(value))
b'0201010420576a804c09c5a16f57d9bb46737b5448eae12a9a95f6e1d1e19a25c8b7b37e68a14403420004f054ea725e78b6a8e8045420f1be81acbafd4aa130595f0bb55e1430afa153147c40fa560815054372a7d146ce767128488a8da2ce84aa3c0b3ef5e0f1ed9f90'
还是我必须使用标签的知识来进一步解码
请注意,在ASN.1中,标记没有任何意义。。。它仅用于编码和解码数据(并且仅在BER、DER、CER编码规则中)
为了理解数据的含义,您始终需要ASN.1规范(
ECPrivateKey
in@Crypt32 answer)文件x.690中解释了编码和解码误码率的所有概念
对标签进行编码时(参见x.690文档中的8.1.2),需要3条信息:
让我们以
ECPrivateKey
为例那么,回到你的问题:
请注意,这些名称来自您正在使用的工具,而不是ASN.1词汇表
编辑:您提供的链接https://en.wikipedia.org/wiki/X.690#Types中对其进行了很好的总结
转到https://asn1.io/asn1playground/并编译以下规范
解码以下值(我只是把306B放在你的值之前)。。。这意味着一个107字节的序列
您可以看到您的值是version、privateKey和publicKey的序列(没有可选参数)
标记16是
SEQUENCE
或SEQUENCE OF
typ=32
表明位6被设置为1,所以序列是构造形式的。事实上,在密码学消息中,序列总是以构造形式使用。我不知道cls=0
是什么意思(我不熟悉Python)SEQUENCE
是具有任意字段的结构SEQUENCE OF
是相同类型(原语或构造的)元素的有序数组。{SEQUENCE
)由ASN.1模块定义确定value
在您的案例中是一个有效的ECPrivateKey
(根据RFC 5915)结构,定义如下:以及ASN.1编辑器中的转储:
相关问题 更多 >
编程相关推荐