BER编码规则

news2025/2/23 20:08:26

文章目录

  • 一、BER 编码规则介绍
  • 二、BER编码数据组成
  • 三、Identifier octets Type
    • 1. tag class 分类
    • 2. p/c 分类
    • 3 tag type
    • 4. ASN.1的原始数据类型(TAG)
  • 四、 Length octets
    • 1、定长的短格式
    • 2、不定长格式
    • 3、保留格式
  • 五、Contents octets
  • 六 、BER编码番外

一、BER 编码规则介绍

BER (基本编码规则) 是 ASN.1 标准制定的用于将数据编码为二进制格式的原始规则。这些规则在 ASN.1 术语中统称为传输语法,指定用于编码数据的确切八位字节(8 位字节)。

二、BER编码数据组成

BER 基本编码规则的格式指定了一种用于编码 ASN.1 数据结构的自描述和自定界格式。每个数据元素都被编码为类型标识符长度描述实际数据元素,以及必要时的内容结束标记。这些类型的编码通常称为类型-长度-值(TLV) 编码。但是,在 BER 的术语中,它是identifier-length-contents。这种格式允许接收者从不完整的流中解码 ASN.1 信息,而无需预先了解数据的大小、内容或语义.

Identifier octets TypeLength octetsContents octetsEnd-of-Contents octets
TypeLengthValue(only if indefinite form)

三、Identifier octets Type

type 被编码成一个或多个字节,主要由 标签种类tag class,数据类型P(Primitive)/C(Constructed),tag number 组成。

结构如下:
在这里插入图片描述
第一个字节的前2位表示 tag class 第3位表示p/c,后边则是tag number

1. tag class 分类

tag class 有以下几种,它的值是用来区分 ASN.1 类型

类型说明
universal0表示原始的数据类型
application1只适用于一个特定的应用程序类型
context-specific3根据上下文定义的类型
private4私人规范中定义的类型

2. p/c 分类

p/c 表示数据内容是基本的数据类型还是复合的数据类型。

类型说明
Primitive §0数据内容仅由一个数据元素组成
Constructed ©1数据内容由多个数据元素组成

3 tag type

tag type 数据的标识,是固定的。在asn.1的原始数据类型表里可以看到。
如果定义的数据类型不是 Universal 的数据类型,那么此时需要用到更多的字节序列如 Octet2。在使用这类标记的时候,要将 Octet1 的第 5 到第 1 个二进制位置为 1 ,如果 Octet2 后面还有 Octet3,那么 Octet2 的第 8 个二进制位应该为 1。

4. ASN.1的原始数据类型(TAG)

数据类型编码类型Tag number(十进制)Tag number(十六进制)
End-of-Content (EOC)Primitive00
BOOLEANPrimitive11
INTEGERPrimitive22
BIT STRINGBoth33
OCTET STRINGBoth44
NULLPrimitive55
OBJECT IDENTIFIERPrimitive66
Object DescriptorBoth77
EXTERNALConstructed88
REAL (float)Primitive99
ENUMERATEDPrimitive10A
EMBEDDED PDVConstructed11B
UTF8StringBoth12C
RELATIVE-OIDPrimitive13D
TIMEPrimitive14E
Reserved15F
SEQUENCE and SEQUENCE OFConstructed1610
SET and SET OFConstructed1711
NumericStringBoth1812
PrintableStringBoth1913
T61StringBoth2014
VideotexStringBoth2115
IA5StringBoth2216
UTCTimeBoth2317
GeneralizedTimeBoth2418
GraphicStringBoth2519
VisibleStringBoth261A
GeneralStringBoth271B
UniversalStringBoth281C
CHARACTER STRINGConstructed291D
BMPStringBoth301E
DATEPrimitive311F
TIME-OF-DAYPrimitive3220
DATE-TIMEPrimitive3321
DURATIONPrimitive3422
OID-IRIPrimitive3523
RELATIVE-OID-IRIPrimitive3624

四、 Length octets

Length字段标识 value字段编码 的字节数,分为定长和不定长。其中定长的length指的是长度不超过 127 的短格式和长度超过 127 字节的长格式。
在这里插入图片描述

1、定长的短格式

a、前面的第一位是0,后边的7个位代表长度,因为7个位的2进制是0111 1111,最大也就是127,所以要求短格式不能超过127
b、定长长格式:最高位是1,后面的7个位表示长度值占用的字节数,然后跟上长度值。

例如长度为300,转换成2进制是0000 0001 0010 1100,占用2个字节,那么编码后应该是
1 000 0010 0000 0001 0010 1100 总共占用3个字节,用16进制表示 0x82 0x01 0x2c

2、不定长格式

根据图上看到最高位为1,后边7个位全是0,那就是1000 0000 也就是0x80 固定的数值
在value结尾处标记2个0x00代表内容结束,因为是不定长,必须知道内容在网络上传输时读到啥时候结束。

3、保留格式

最高位为1,后边7个为全是1,0xFF表示
同时在数据内容结尾处用2个0x00标记,代表着内容结束。

五、Contents octets

value 是数据内容的字节编码,如果不存在或者是虚对象的时候可能没有,比如value是NULL

六 、BER编码番外

  1. CER 和DER 都是BER的一种变体,他们从基本编码规则允许的编码中选择一种编码,消除了其余选项。
  2. X.690
    X.690 是一个ITU-T(https://en.wikipedia.org/wiki/ITU-T)标准,指定了几种编码规则,主要是(BER, CER, DER )

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

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

相关文章

20231125硬盘电源线5线不能识别日立10T的硬盘的解决方法

20231125硬盘电源线5线不能识别日立10T的硬盘的解决方法 2023/11/25 23:00 缘起,在拼多多买了2片10TB的7200rpm的日立二手硬盘。 型号:日立 mar-2018 10T硬盘 接上电脑,硬盘感觉在转动了【正常上电了。】 但是X99主板,在WIN10下就…

leetcode设计循环队列(链表方式来实现)

上次我们那个设计循环队列的时候用的是数组,因为那个时候还是不太会链表,现在有了链表的思路,我们一起来看看解题步骤吧。 https://leetcode.cn/problems/design-circular-queue/description/ 设计循环队列 那我们其实最主要的就是我们这个…

时间序列预测实战(十九)魔改Informer模型进行滚动长期预测(科研版本)

论文地址->Informer论文地址PDF点击即可阅读 代码地址-> 论文官方代码地址点击即可跳转下载GIthub链接 个人魔改版本地址-> 文章末尾 一、本文介绍 在之前的文章中我们已经讲过Informer模型了,但是呢官方的预测功能开发的很简陋只能设定固定长度去预测未…

微软 Edge 浏览器目前无法支持 avif 格式

avif 格式在微软 Edge 浏览器中还是没有办法支持。 如果你希望能够查看 avif 格式,那么只能通过浏览器打开,然后浏览器将会把这个文件格式下载到本地。 avif 格式已经在其他的浏览器上得到了广泛的支持,目前不支持的可能就只有 Edge 浏览器。…

drool 7 multiThread 测试

基本信息 通过option ,使用如下代码进行设置 //线程数量10MaxThreadsOption optionMaxThreadsOption.get(10);kieBaseConf.setOption(option);kieBaseConf.setOption(MultithreadEvaluationOption.YES);并发是以CompositeDefaultAgenda/Rule为颗粒度来的&#xff0…

Linux篇:文件管理

一、共识原理: 1. 文件内容属性,内容与属性都是数据,都要在磁盘中保存。 2. 文件分为打开的文件和没打开的文件。 3. 研究打开的文件:本质是研究进程和文件的关系,因为是进程负责打开文件。 4. 没打开的文件在存储介质…

【docker】docker的基础命令

基础操作 docker info #查看docker的基本信息docker version #查看docker版本信息一、镜像操作 1、搜索镜像 docker search nginx2、下载镜像 docker pull nginx#从仓库中下载镜像,若没有指定标签,则下载最新的版本,也就是标签为: lat…

使用 STM32 读取和解析 NTC 热敏电阻的数值

本文介绍了如何利用 STM32 微控制器读取和解析 NTC(Negative Temperature Coefficient)热敏电阻的数值。首先,我们将简要介绍 NTC 热敏电阻的原理和特性。接下来,我们将详细讨论如何设计电路连接和采用合适的 STM32 外设进行数值读…

【超强笔记软件】Obsidian实现免费无限流量无套路云同步

【超强笔记软件】Obsidian如何实现免费无限流量无套路云同步? 目录 一、简介 软件特色演示: 二、使用免费群晖虚拟机搭建群晖Synology Drive服务,实现局域网同步 1 安装并设置Synology Drive套件 2 局域网内同步文件测试 三、内网穿透群…

docker介绍、部署与常用命令

一、docker 介绍 1、容器(Container): (1) 概念: 容器是一种用于运行和部署应用程序的技术。它将应用程序及其所有依赖项(例如代码、运行时、系统工具、系统库等)打包在一个独立的、可移植的运行环境中&…

Java多态:多态多态,多么变态

👑专栏内容:Java⛪个人主页:子夜的星的主页💕座右铭:前路未远,步履不停 目录 一、重写1、重写的规则2、重写与重载的区别 二、多态1、多态的概念2、多态的实现3、向上转移和向下转型Ⅰ、向上转型Ⅱ、向下转…

Linux加强篇004-Vim编辑器与Shell命令脚本

目录 前言 1. Vim文本编辑器 1.1 编写简单文档 1.2 配置主机名称 1.3 配置网卡信息 1.4 配置软件仓库 2. 编写Shell脚本 2.1 编写简单的脚本 2.2 接收用户的参数 2.3 判断用户的参数 3. 流程控制语句 3.1 if条件测试语句 3.2 for条件循环语句 3.3 while条件循环语…

spring aop核心原理概念

目录 概述aop核心概念解析Target(目标对象)Joinpoint(连接点)Advice(通知/增加)Pointcut(切入点)Aspect(切面)Advisor(通知器)Weaving(织入)Proxy(代理)Introduction(引介) 结束 概述 aop核心概念解析 Target(目标对象) 代理的目标对象 目标对象(Target)的确立,是…

C++ 实现位图

引出 面试题:给出 40 亿个不重复的无符号整数,没有排过序。给定一个无符号整数,如何快速判断这个数是否在这 40 亿个无符号整数中。[ 腾讯面试题 ] 想法一:将 40 亿个数据存放到 set 里面,然后再查找指定的无符号整数。…

深度学习技巧应用30-深度学习中的GPU的基本架构原理与应用技巧

大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用30-深度学习中的GPU的基本架构原理与应用技巧,GPU是一种专门用于处理大量并行操作的硬件设备,它的架构设计主要是为了图形渲染。然而,由于其并行处理能力,现在广泛应用于深度学习、科学计算等领域。主要的GPU制造商…

运维高级--centos7源码安装Apache

安装必要的依赖项: sudo yum groupinstall "Development Tools" sudo yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel这将安装编译和构建所需的基本工具,以及 Apache HTTP Server 所需的一些依赖项。 下载 Apache HTT…

从0到0.01入门 Webpack| 008.精选 Webpack面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

【网络】DNS协议、ICMP协议、NAT技术

DNS协议、ICMP协议、NAT技术 一、DNS协议1、产生背景2、域名简介3、域名解析的工作流程4、使用dig工具分析DNS过程 二、ICMP协议1、ICMP介绍2、ICMP协议格式3、ping命令4、traceroute命令 三、NAT技术1、NAT技术背景2、NAT IP转换过程3、地址转换表4、NAPT技术5、重新理解路由器…

JsonRPC协议详解(协议介绍、请求示例、响应示例)

JsonRPC协议详解 什么是RPC? RPC(远程过程调用)是一种用于实现分布式系统中不同进程或不同计算机之间通信的技术。它允许我们像调用本地函数一样调用远程计算机上的函数,使得分布式系统的开发变得更加简单和高效。 什么是JsonRP…

【数据结构实验】图(三)图的深度优先搜索(DFS)生成树

文章目录 1. 引言2. 深度优先搜索生成树3. 实验内容3.1 实验题目(一)输入要求(二)输出要求 3.2 算法实现1. 数据结构2. 队列操作函数3. 广度优先搜索遍历4. 创建图5. 深度优先搜索算法6. 主函数及DFS主函数7. 输出生成树信息 3.3 …