首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基本了解ASN.1

基本了解ASN.1
EN

Stack Overflow用户
提问于 2021-01-29 01:22:30
回答 1查看 209关注 0票数 1

我正在尝试掌握ASN.1的概念和编码方案(例如DER),并希望进行一次理智的检查。

到目前为止,我得到的是ASN.1定义了抽象数据类型(整数、布尔等,有些更复杂),它允许您以一种抽象的方式定义数据结构,例如:

代码语言:javascript
复制
World-Schema DEFINITIONS AUTOMATIC TAGS ::= 
BEGIN
  Rocket ::= SEQUENCE       
  {
     range     INTEGER, -- huge (see a special directive above)
     name      UTF8String (SIZE(1..16)),
     message   UTF8String DEFAULT "Hello World" , 
     fuel      ENUMERATED {solid, liquid, gas},
     speed     CHOICE     
     { 
        mph    INTEGER,  
        kmph   INTEGER  
     }  OPTIONAL, 
     payload   SEQUENCE OF UTF8String 
  }                                                     
END

这通过定义"Rocket“的某些字段来定义它的结构。DER作为一种编码方案,只有在我想对一个对象进行编码时才会起作用,也就是这个数据结构的具体值。所以基本上我可以告诉我的计算机:根据这个ASN.1模块,序列化下面的JSON文件:

代码语言:javascript
复制
{
  "range":340282366920938463463374607431768211455,
  "name":"Falcon",
  "fuel":"solid",
  "speed":{"mph":18000},
  "payload":["Car", "GPS"]
}

它将生成符合特定标准的比特流,该标准由DER标准定义。(为施行方式而设X.690)。现在,该比特流的每个接收者(知道它是DER编码的数据)将知道按照ASN.1解释该消息。

我不能对自己解释的一件事是:我们必须定义一个接口吗?我的意思是,一旦我们有了定义数据类型(整数、字符串等)的语言(ASN.1) -人们就可以组装消息,对它们进行编码,然后发送它们,并且它们可以被理解。为什么定义我们之间的接口很重要?

如果我理解错了,请纠正我。

EN

回答 1

Stack Overflow用户

发布于 2021-01-29 06:06:47

ASN.1不是一种语言,它是抽象语法符号的缩写。

ASN.1是一组规范,旨在消除想要相互通信的两个系统之间的所有歧义。

首先,描述将要传输的内容(传输语法)。在你的例子中:一枚火箭有一个射程,一个名字,等等。

然后,您决定如何发送内容(编码规则)。

因为您显示了一个Json值(它是人类可读的),所以您可以认为该值解释了它本身。

但是,如果你采用二进制编码规则(这是ASN.1的本质),你很快就会意识到,你绝对需要知道传输语法(你称之为接口)才能解码一个值。

一些二进制编码规则(如BER、DER、CER)给人的印象是,您可以在不知道规范的情况下使用它们,因为它们遵循标签/长度/值模式……如果你知道如何解码一个标签和一个长度,你可以做一个最小的

但是,当您需要使用压缩编码规则(PER)时,如果没有规范,您将完全无能为力……和好的工具。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65942138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档