标签: ber

ASN.1 SEQUENCE(OF)实际标签值

我发现了很多关于SEQUENCE(OF)ASN.1数据类型的标记值的矛盾信息:

维基百科声称它是0x10和0x30:

http://en.wikipedia.org/wiki/Abstract_Syntax_Notation_One - > 0x30

http://en.wikipedia.org/wiki/Basic_Encoding_Rules - > 0x10

根据微软的说法,它是0x30:

http://msdn.microsoft.com/en-us/library/windows/desktop/bb540799%28v=VS.85%29.aspx

在Bouncycastle的资料中可以找到:

public const int Sequence = 0x10;
Run Code Online (Sandbox Code Playgroud)

所以它基本上是0x10和0x30之间的联系.你知道真正的价值是或者我错过了什么吗?

asn.1 ber

11
推荐指数
1
解决办法
5901
查看次数

ASN.1 中隐式和显式标签的编码

我试图了解隐式和显式标签实际上是如何以 DER 二进制形式编码的。

基本的例子很清楚。普通整数,

x INTEGER ::= 5
Run Code Online (Sandbox Code Playgroud)

被编码为 TLV 三元组02 01 05。在

x [2] IMPLICIT INTEGER ::= 5
Run Code Online (Sandbox Code Playgroud)

隐式标记82替换现有标记02并形成另一个 TLV:82 01 05,并且在

x [3] EXPLICIT INTEGER ::= 5
Run Code Online (Sandbox Code Playgroud)

在原始 TLV 周围添加了一个包装器:A3 03 02 01 05

现在我正在研究一个更复杂的案例

30 42 A1 40 30 0D 82 0B  77 77 77 2E 62 61 64 2E
6F 72 67 30 09 82 07 62  61 64 2E 63 6F 6D 30 0D
81 …
Run Code Online (Sandbox Code Playgroud)

asn.1 der ber

7
推荐指数
1
解决办法
3057
查看次数

在EMV事务中解析PDOL以获取GET PROCESSING OPTIONS命令

我正在尝试构建一个格式正确的GET PROCESSING OPTIONS命令,以发送到非接触式EMV卡.这篇文章非常有用,但我只需要了解更多细节.

在解析PDOL时,可以安全地假设每个标记的长度为2个字节,然后是预期的数据大小吗?

例如,PDOL 9F66049F02069F37049F1A02被分成 9F66 04,9F02 06等等,每个都有2个字节的标签,1个字节用于数据值的预期长度.

在解析时假设每个标记的长度是2个字节是否安全?

asn.1 emv tlv ber contactless-smartcard

6
推荐指数
1
解决办法
3432
查看次数

对BER(基本编码规则)感到困惑

我正在努力学习和理解BER(基本编码规则).

我一直在使用网站http://asn1-playground.oss.com/来试验不同的ASN.1对象并使用BER对它们进行编码.

然而,即使是最简单的编码似乎也让我感到困惑.

我们来看一个简单的ASN.1模式:

World-Schema DEFINITIONS AUTOMATIC TAGS ::= 
BEGIN
  Human ::= SEQUENCE {
     name UTF8String
  }
END
Run Code Online (Sandbox Code Playgroud)

所以基本上这只是一个SEQUENCE名为UTF8String类型的字段name.

与此序列匹配的值的示例如下:

{ "Bob" }
Run Code Online (Sandbox Code Playgroud)

所以,使用http://asn1-playground.oss.com/,我产生以下数据的BER编码:

some-guy Human ::= 
{  
    name "Bob"
}
Run Code Online (Sandbox Code Playgroud)

我希望这会生成一个序列对象,后跟一个字符串对象.

我得到的是:

30 05 80 03 42 6F 62
Run Code Online (Sandbox Code Playgroud)

现在,我了解了一些编码.第一个八位字节,30,是标识,它告诉我们,一个SEQUENCE类型是第一个对象.的3000110000在二元的,这意味着我们具有class0,一台PC的(原始/构造的)比特1(意思构造),以及一个标签编号10000(十进制16),这意味着SEQUENCE

到现在为止还挺好.下一个值是LENGTH,以字节为单位SEQUENCE,即05.

好的,还是那么好.

但是......我完全 …

encoding asn.1 ber

3
推荐指数
2
解决办法
7314
查看次数

读BERTLV时,什么时候停下来?

我有以下 BERTLV: 61394F0BA00000030800001001234579074F05A000012345500E49442D4F6E65205049562042494F5F50107777772E6F626572746875722E636F6D7F66080202800002028000

我试图以递归方式解析它,所以我将第一部分视为 TLV。

标签: 0x61, Len: 0x39, 值:4F0BA00000030800001001234579074F05A000012345500E49442D4F6E65205049562042494F5F50107777772E6F626572746875722E636F6D

然后我进一步分解它,得到

标签: 0x4F, Len: 0x0B, 值: A000000308000010012345

现在,我该如何停止?在这一点上,我知道这个值是这个 TLV 的最后一站,而不是另一个嵌套的 TLV。

asn.1 tlv ber

3
推荐指数
1
解决办法
1493
查看次数

解码SNMP PDU - 从哪里开始?

你好我这里的第一个问题,需要一点指导.

我正在研究一个主要用于解码SNMP PDU的数据包嗅探器,但是我并不完全确定它在哪里.

简单地说,我的数据包嗅探器可以从数据包中提取信息,但我对数据有效负载字段感兴趣.它是用C++编写的,我使用的是winsock.

我该怎么办呢?SNMP字段是用基本编码规则编码还是我必须深入研究ASN.1?

我只想将数据有效负载字段中的那些SNMP字段解码为人类可读的形式.它们将被转储到文本文件中.所以我也会考虑解码OID.我正在验证所有内容,因为我使用Wireshark并使用GETIF查询我的SNMP节点.

任何指导表示赞赏.

编辑:

感谢user1793963非常好解释.对所有标记为过宽的人抱歉.

要详细说明我的原始问题,任何人都可以解释PDU本身的初始部分.

示例:我的程序输出这些十六进制值30 82 00 A3 02 01 00,即SEQUENCE(30),LENGTH(82)和另外两个值.这是来自GetRequest PDU.

GetResponse PDU 在LENGTH中显示这些值30 81 B7 02 01 00,SEQUENCE,81和另一个值.

有人可以解释以粗体标记的值.如果它使用简单的TLV结构,那么代表什么值?我所知道的是序列(30)的开始和总PDU长度(82和81),我知道02 01 00在LENGTH和VERSION 0中是INTEGER 1但是我不理解00 A3(GetRequest)和B7 (的GetResponse).这些值代表什么?非常感谢.

我也使用Wireshark来检查值,但是它们没有说明PDU序列的开始

decode snmp asn.1 ber

0
推荐指数
1
解决办法
1万
查看次数

标签 统计

asn.1 ×6

ber ×6

tlv ×2

contactless-smartcard ×1

decode ×1

der ×1

emv ×1

encoding ×1

snmp ×1