ASN.1语言详解(编码规则、关键字、符号、数据类型)

news2024/10/7 10:13:18

目录

 一. ASN.1基本信息

▐ ASN.1编码规则

二. ASN.1语法规范

▐ ASN.1的关键字

▐ ASN.1的符号

▐ ASN.1的数据类型

▐ 示例


一. ASN.1基本信息

ASN.1(Abstract Syntax Notation One)是一种国际标准(由ITU-T X.680系列建议定义),用于描述数据的结构。它主要用于定义和编码传输协议中的数据,以确保不同系统间的数据交换。

ASN.1语法可用来描述各种类型的数据,包括文本、图形、视频与音频等。通常用于定义应用数据的抽象语法和PDU的结构。比如SNMP中使用ASN.1进行管理信息结构SMI的定义和管理数据库MIB的定义。ASN.1编码可用来规范数据传输过程,解决异构网络对数据理解的二义性。

ASN.1最初是ITU针对电信协议设计而制定,后来被ISO接受成为国际标准。

ASN.1的主要应用:

  • 网络协议:ASN.1被广泛用于各种网络协议,如SNMP(Simple Network Management Protocol)、LDAP(Lightweight Directory Access Protocol)和X.500目录服务。它帮助定义和编码数据,使不同的系统可以互相通信。

  • 电信系统:在电信行业,ASN.1用于信令协议,如SS7(Signaling System No. 7)和GSM(Global System for Mobile Communications)。它确保不同电信设备之间的互操作性。

  • 安全协议:ASN.1被用于许多安全协议,如X.509数字证书和SSL/TLS。它帮助定义和编码证书、密钥和其他安全相关的数据结构。

  • 金融系统:在金融行业,ASN.1用于标准化各种交易和信息交换协议,如ISO 20022标准。这有助于不同金融机构之间的信息交换和处理。

  • 多媒体通信:ASN.1还用于多媒体通信协议,如H.323和H.264,用于视频会议、VoIP和其他实时通信应用。

  • 智能卡:在智能卡应用中,ASN.1用于定义和传输数据,如在电子护照和支付卡中。

  • 数据交换格式:ASN.1可用于定义通用数据交换格式,使不同系统能够理解和处理相同的数据结构。

▐ ASN.1编码规则

ASN.1的广泛应用得益于其灵活性和扩展性,以及它支持多种编码规则,如BER(Basic Encoding Rules)、DER(Distinguished Encoding Rules)和PER(Packed Encoding Rules),以满足不同应用的需求。ASN.1 提供了多种编码规范,以适应不同应用的需求。主要的编码规范包括:

  1. BER(Basic Encoding Rules)

    • 基本编码规则,是ASN.1的最基本编码规则,灵活且容易实现。
    • 使用标签类型(Type)、长度(length)和内容(value)三部分来表示数据。
    • BER的灵活性也意味着它可能会生成冗长的编码,不适合对效率要求高的场合。
  2. DER(Distinguished Encoding Rules)

    • 区别编码规则,是BER的子集,消除了BER中的不确定性,确保了唯一的编码方式。
    • 用于需要唯一编码的场合,如数字证书(X.509)和加密协议。
  3. CER(Canonical Encoding Rules)

    • 规范编码规则,与DER类似,但用于无限长字符串的情况下。
    • 通过规范化处理,确保编码的唯一性,适用于一些需要数据一致性的应用。
  4. PER(Packed Encoding Rules)

    • 紧凑编码规则,通过优化编码来减少数据的长度,适合对带宽敏感的场合。
    • 有两种变体:对齐(Aligned PER)和非对齐(Unaligned PER),对齐的编码会以八位字节为单位,而非对齐则不会。
  5. XER(XML Encoding Rules)

    • XML编码规则,将ASN.1描述的数据结构编码为XML格式,便于与基于XML的系统进行互操作。
    • 易于阅读和调试,但比其他编码规则更加冗长。
  6. OER(Octet Encoding Rules)

    • 八位字节编码规则,旨在提供一种高效且容易解析的编码规则。
    • 适用于需要紧凑和快速解析的应用场合。
  7. JER(JSON Encoding Rules)

    • JSON编码规则,将ASN.1描述的数据结构编码为JSON格式。
    • 适用于与基于JSON的系统和应用进行互操作。

这里对于BER编码的具体讲解可以查看:图文解析ASN.1中BER编码:结构类型、编码方法、编码实例


二. ASN.1语法规范

ASN.1(Abstract Syntax Notation One)的语法规范定义了一种描述数据结构的方式,其语法类似于编程语言中的声明和定义。

文字约定:

  • 区分大小写
  • 跳空格
  • 注释以--开头,以--结束或行尾结束
  • 标识符由大小写字母,数字和横线组成
  • 内部标识符(关键字)全部大写
  • 用户定义的类型名和模块名以大写字母开头
  • 宏名称全部大写
  • 变量名(数据对象)以小写字母开头

▐ ASN.1的关键字

以下是ASN.1关键字及其含义的表格:

关键字含义
INTEGER表示整型数据。
BOOLEAN表示布尔型数据,其值可以是TRUE或FALSE。
BIT STRING表示位串,由一系列的位组成。
OCTET STRING表示字节串,由一系列的字节组成。
NULL表示空值。
OBJECT IDENTIFIER表示对象标识符,用于唯一标识一个对象。
SEQUENCE表示序列类型,可以包含多个字段,字段可以是任意ASN.1类型。
SET类似于序列,但是元素的顺序不重要。
CHOICE表示选择类型,只能选择其中一个选项。
ANY表示任意类型。
ENUMERATED表示枚举类型,其值是预先定义的一组常量。
SEQUENCE OF表示序列类型,包含多个相同类型的元素。
SET OF类似于SEQUENCE OF,但是元素的顺序不重要。
OPTIONAL表示可选字段。
DEFAULT表示字段的默认值。
EXPLICIT表示显式标签。
IMPLICIT表示隐式标签。
TAGS用于定义数据类型的标签。
DEFINITIONS开始定义数据结构的关键字。
END结束定义的关键字。

这个表格提供了ASN.1中常用关键字的基本概述,帮助理解和使用ASN.1进行数据结构的定

▐ ASN.1的符号

以下是ASN.1中一些常用符号及其含义的表格:

符号含义
{}定义一个模块或类型的定义块
::=用于定义类型或值的赋值操作符
``
( )用于定义SEQUENCE或SEQUENCE OF中的字段
[ ]用于定义OPTIONAL或DEFAULT字段的标签
< >用于定义ANY类型时指定具体的类型
...表示省略号,用于省略重复的模式或序列
;用于分隔多个定义或语句
" "用于字符串字面量中的空格
' '用于枚举值中的分隔符
%x用于定义OCTET STRING类型中的十六进制值
%d用于定义INTEGER类型中的十进制值
%o用于定义INTEGER类型中的八进制值
%b用于定义BIT STRING类型中的二进制值

这些符号在ASN.1的语法中扮演着重要的角色,它们帮助定义数据结构和数据类型,以及如何组织和解释数据。

▐ ASN.1的数据类型

ASN.1提供了丰富的数据类型,用于定义网络协议和数据交换格式,这些部分内容在上述的关键字中也有提到。

简单类型:直接规定取值集合的类型

  • INTEGER:表示整数值。
  • BOOLEAN:表示布尔值(TRUE或FALSE)。
  • BIT STRING:表示位的序列。
  • OCTET STRING:表示字节序列。
  • NULL:表示空值。
  • OBJECT IDENTIFIER:表示对象标识符,用于唯一标识一个对象或类型。
  • ENUMERATED:表示从一组预定义的枚举值中选择。

结构类型:也叫构造类型,由多个组件构成的类型,每个组件是一个简单类型或者结构类型

  • SEQUENCE:序列类型,包含有序的字段集合。
  • SET:集合类型,包含无序的字段集合。
  • SEQUENCE OF:表示相同类型的元素序列。
  • SET OF:表示相同类型的元素集合
  • CHOICE:表示从多个选项中选择一个。
  • ANY:表示任意ASN.1类型。

标签类型

▐ 示例

以下是一些ASN.1语法的示例,展示了基本数据类型和构造类型的使用:

简单类型定义

PersonName ::= OCTET STRING
Age ::= INTEGER

复杂类型定义

Person ::= SEQUENCE {
    name    PersonName,
    age     Age,
    gender  ENUMERATED { male(0), female(1) },
    address OCTET STRING OPTIONAL
}

CHOICE类型

ContactInfo ::= CHOICE {
    phoneNumber OCTET STRING,
    emailAddress OCTET STRING
}

SEQUENCE OF类型

PhoneNumbers ::= SEQUENCE OF OCTET STRING

约束:ASN.1允许对类型进行约束,例如限制整数的取值范围:

Age ::= INTEGER (0..120)

下面是一个包含所有上述元素的完整ASN.1定义示例:

Person ::= SEQUENCE {
    name    OCTET STRING,
    age     INTEGER (0..120),
    gender  ENUMERATED { male(0), female(1) },
    contactInfo CHOICE {
        phoneNumber OCTET STRING,
        emailAddress OCTET STRING
    },
    addresses SEQUENCE OF OCTET STRING OPTIONAL
}

Company ::= SEQUENCE {
    companyName OCTET STRING,
    employees   SEQUENCE OF Person
}
  • Person类型定义了一个人,包括姓名、年龄、性别、联系信息和可选的地址列表。
  • Company类型定义了一个公司,包括公司名称和员工列表,每个员工都是一个Person类型。



 本次的分享就到此为止了,希望我的分享能给您带来帮助,创作不易也欢迎大家三连支持,你们的点赞就是博主更新最大的动力!如有不同意见,欢迎评论区积极讨论交流,让我们一起学习进步!有相关问题也可以私信博主,评论区和私信都会认真查看的,我们下次再见

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1834129.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

elasticsearch hanlp插件远程词典配置

elasticsearch hanlp插件远程词典配置 背景远程词典配置新增远程词典文件修改hanlp-remote.xml自动加载词典 远程词典测试 背景 在使用elasticsearch的过程中&#xff0c;总会遇到与分词相关的需求&#xff0c;这里将针对常用的elasticsearch hanlp&#xff08;后面统称为 es …

表单中的常用元素

10.图像形式上传文件 <input type“image”>定义图像形式的提交。 src 属性和alt属性必须与<input type“image””>结合使用。 input type"image"src"img/l.jpg"alt"submit"/> 11.下拉列表框 <select>标签定义下拉列表框…

java基础-IDEA环境基础用法自动导包等设置

IDEA&#xff1a; 是用于Java语言开发的集成环境&#xff0c;它是业界公认的目前用于Java程序开发最好的工具。 把代码编写&#xff0c;编译&#xff0c;执行&#xff0c;调试等多种功能综合到一起的开发工具。 IDEA项目结构&#xff1a; 多级包用 . 链接。 快速生成 快…

解锁工业自动化:通过CANopen转Profinet的无缝对接

通过开疆智能CanOpen转ProfiNet网关&#xff08;KJ-PNG-205&#xff09;实现&#xff0c;上位机能够直接与CANopen总线驱动器进行通信&#xff0c;以实时获取设备运行状态信息。具体过程为&#xff1a;上位机通过发送CanOpen协议命令到CanOpen转ProfiNet网关&#xff0c;然后由…

华为手环9省电设置

1、 手环开启熄屏显示续航约3天&#xff0c;原因为屏幕持续常亮显示&#xff1b;如不需要可通过手环“设置->表盘->熄屏显示”路径进行关闭&#xff1b; 2、 手环具备后台健康自动检测功能&#xff0c;您可根据需要选择是否使用或关闭&#xff1a; &#xff08;1&#x…

怎么将文档翻译免费导出?这些工具让你写论文更轻松

对于许多学生&#xff0c;啃下外文文献的难度有时甚至超过了写论文。查词费时&#xff0c;段落翻译又常受限于字数。 在线翻译工具&#xff0c;作为语言间的桥梁&#xff0c;正在学术和商业领域变得越来越重要。 下面&#xff0c;让我们快速浏览一些免费的文档翻译软件app&am…

css之浏览器兼容性

css之浏览器兼容性 内核 内核代表作品 兼容的概念和原因 Hack的副作用 常见的CSS Bug 多个图片在一起&#xff0c;图片套个盒子 图片在IE浏览器上有蓝色边框 解决办法&#xff1a;给img加上 border:0 表单元素中距离顶部元素不一样 左边input 右边button 解决办法&#x…

四款让人大开眼界的高质量软件,个个实力超群,使用起来爱不释手

电脑里的Windows软件&#xff0c;简直多得数不清&#xff0c;啥都有。 像那个电子表格、写文章的、玩游戏聊天的、还有修图的&#xff0c;这些都太常见了&#xff0c;它们确实给咱们生活带来方便&#xff0c;但有时候也会让那些不太懂电脑的小伙伴们头疼不已。 讲真&#xff0…

物联网协议应用

目录 前言一、NTP协议1.1 NTP简介1.2 NTP实现 二、HTTP协议2.1 HTTP协议简介2.2 HTTP服务器 三、MQTT协议3.1 MQTT协议简介3.1.1 MQTT通信模型3.1.2 MQTT协议实现原理3.1.3 MQTT 控制报文 3.2 移植MQTT协议 前言 本文主要介绍一下物联网协议如NTP协议、HTTP协议和MQTT协议的接口…

elementPlus渲染需要权限校验的图片

技术栈&#xff1a;elementPlusvue3 html部分&#xff1a; <el-image :style"{width:width,height:height}" ref"previewimg" :src"previewSrc"></el-image> js部分 /*** 预览图片* param {String} url [图片的地址]*/const showP…

飞腾派初体验(3)

“我心光明&#xff0c;夫复何言” - 王阳明。 朋友的题词&#xff0c;念念不忘 做人要厚道&#xff0c;挖坑就要填。说了要整labview&#xff0c;现在来还愿。 国内labview还是相对小众的东西&#xff0c;而且主要是大厂设备在用&#xff0c;同时NI原厂比较佛系&#xff08;欧…

企业邮箱大附件无法上传?无法确认接收状态?这样解决就行

Outlook邮箱作为最常用的邮箱系统&#xff0c;被全世界企业采用作为内部通用沟通方式&#xff0c;但Outlook邮箱却有着明显的使用缺陷&#xff0c;如邮箱大附件上传障碍及附件接收无提示等。 1、企业邮箱大附件无法上传 Outlook企业邮箱大附件的上传上限一般是50M&#xff0c;…

opencv c++ 检测图像尺寸大小,标注轮廓

1. 项目背景 本项目旨在开发一个图像处理程序&#xff0c;通过使用计算机视觉技术&#xff0c;能够自动检测图像中物体的尺寸并进行分类。项目利用了开源的计算机视觉库 OpenCV&#xff0c;实现了图像的灰度处理、二值化、轮廓检测、边界框绘制以及尺寸分类等功能。通过这些功…

Java控制语句——break和continue

系列文章目录 文章目录 系列文章目录前言一、【break的例子】二、【continue的例子】 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂…

003 AOP介绍

文章目录 什么是AOP为什么用AOPAOP相关术语介绍AOP实现之AspectJ(了解)AOP实现之Spring AOP(了解)JDK动态代理Cglib动态代理 什么是AOP 在软件业中&#xff0c;AOP为Aspect Oriented Programming的缩写&#xff0c;意为面向切面编程作用&#xff1a;在不修改目标类代码的前提下…

Ubuntu乌班图安装VIM文本编辑器工具

系列文章目录 Ubuntu-24.04-live-server-amd64安装界面中文版 Ubuntu-24.04-live-server-amd64启用ssh Ubuntu安装qemu-guest-agent 文章目录 系列文章目录前言一、安装VIM&#xff1f;二、VIM基本设置总结 前言 从centos转到Ubuntu发现默认安装没有vi 一、安装VIM&#xff1…

服务器部署开源大模型完整教程 Ollama+Gemma+open-webui

现在开源的大模型其实挺多的&#xff0c;今天搭建Gemma这个谷歌开源的大模型&#xff0c;但是你想搭建别的只要你看完你都会了。 介绍 Ollama&#xff1a;一款可以让你在本地快速搭建大模型的工具 官网&#xff1a;https://ollama.com/ github&#xff1a;https://github.c…

【机器学习】智能创意工厂:机器学习驱动的AIGC,打造未来内容新生态

&#x1f680;时空传送门 &#x1f50d;机器学习在AIGC中的核心技术&#x1f4d5;深度学习&#x1f388;生成对抗网络&#xff08;GANs&#xff09; &#x1f680;机器学习在AIGC中的具体应用&#x1f340;图像生成与编辑⭐文本生成与对话系统&#x1f320;音频生成与语音合成 …

关于阿里云效流水线自动部署项目教程

1、登录阿里云效:阿里云登录 - 欢迎登录阿里云&#xff0c;安全稳定的云计算服务平台 2、点击左侧流水线&#xff1a; 3、在流水线界面&#xff0c;新建流水线 4、我的是php代码&#xff0c;因此选择php模版 5、创建之后添加流程线源&#xff0c;如下图 6、选择相应的源头。比…

【市场分析】TEMU平台美国区品牌产品市场分析Python采集爬虫数据

文章目录 一、引言二、数据概述1. 数据字段展示2. 数据统计信息展示 三、数据分析3.1 店铺托管模式3.1.1 半托管与全托管占比 3.2 品牌化最多的类目3.2.1 数据可视化展示3.2.2 各类目品牌商品占比分布 3.3 商品占比最多的Top品牌3.2.1 数据可视化展示3.2.2 品牌商品数量占比Top…