TLV 格式是什么格式

一种可变格式, TLV 的意思就是: Type 类型, Lenght 长度, Value 值; Type 和 Length 的长度固定,一般那是 2 、 4 个字节; Value 的长度有 Length 指定;

解析方法:

1. 读取 type 转换为 ntohl 、 ntohs 转换为主机字节序得到类型;指针偏移 +2 或 4

2. 读取 lenght ,转换为 ntohl 、 ntohs 转换为主机字节序得到长度;指针偏移 +2 或 4

3. 根据得到的长度读取 value ,指针偏移 +Length ; 。 。 。 。 继续处理后面的 tlv ; 标签 (Tag) 字段是关于标签和编码格式的信息; 长度 (Length) 字段定义数值的长度; 内容 (Value) 字段表示实际的数值。

因此,一个编码值又称 TLV(Tag,Length,Value) 三元组。编码可以是基本型或结构型,如果它 表示一个简单类型的、完整的显式值,那么编码就是基本型 (primitive) ;如果它表示的值具 有嵌套结构,那么编码就是结构型 (constructed) 。

TLV 编码就是指先对 Tag 编码,再对 Length 编码,最后对 Value 编码。 BER 编码的长度确定 的编码方式就是这样的。 BER 编码有两种方式:

一种是长度确定的编码方式。 这由 3 部分组成 Identifier octets 、 Length octets 和 Contents octets (可以和 TLV 对应) 。

另一种是长度不确定的编码方式。这由 4 部分组成 Identifier octets 、 Length octets 、 Contents octets 、 End-of-contents octets 。其 中 Length octets 为 0x80 , End-of-contents octets 为 0x00 00 。

每种类型都能够编码成长度确定的编码方式, 但是有的类 型不能够编码成长度不确定的编码方式。 DER 编码只能使用长度确定的编码方式。 Identifier octets 由 3 部分组成 Class 、 P/C 和 Tag number 。

Identifier octets 的第一个字节的高 2 位为 Class ,接下来一位为 P/C ,其他位表示 Tag number 。 Class 有 4 中类型 Universal(00) 、 Application(01) 、 Context-specific(10) 和 Private(11) 。

P/C 位如果为 1 则表示是 Constructed 的, 为 0 表示是 Primitive 。如果 0<=T ag number<=30 ,则整个 Identifier octets 只有一个字节,否 则第一个字节的后 5 位前为 1 ,接下来找第一个最高位为 0 的字节,该字节就是 Identifier octets 的最后一个字节。从第二个字节到最后一个字节去掉最高位的值拼起来就是 T ag number 的值。

长度确定的编码方式的 Length octets 有两种方法编码长度,一种是只用一个字节表示长度, 其最高位为 0 ,后 7 位表示长度值,显然这样只能表示 0-127 。

另一种是第一个字节的最高 位为 1 ,其他位表示后面还有多少个字节属于 Length octets 。后面的那些字节组成的就是长 度值。长度值表示的是 Contents octets 所占的字节数。 DER 要求如果长度为 0-127 则要使用 第一种方式,如果大于 127 则使用后一种方式。

TLV格式是什么格式的更多相关文章

  1. AngularJS过滤器filter-时间日期格式-渲染日期格式-$filter

    今天遇到了这些问题索性就 写篇文章吧 话不多说直接上栗子 不管任何是HTML格式还是JS格式必须要在  controller 里面写 // new Date() 获取当前时间 yyyy-MM-ddd ...

  2. C#RSA算法实现+如何将公钥为XML格式转为PEM格式,给object-C使用

    .net中,处于安全的考虑,RSACryptoServiceProvider类,解密时只有同时拥有公钥和私钥才可以.原因是公钥是公开的,会被多人持有.这样的数据传输是不安全的.C#RSA私钥加密,公钥 ...

  3. RSA密钥之C#格式与Java格式转换

    前言 最近由于项目需求,服务端由c#编写,客户端由java编写.通信数据使用RSA非对称加密.但是java和c#生成的密钥格式是不一样的,所以需要转换格式才可以正常使用.网上搜到使用java进行格式转 ...

  4. Linux下如何将数据库脚本文件从sh格式变为sql格式

    在从事软件开发的过程中,经常会涉及到在Linux下将数据库脚本文件从sh格式变为sql格式的问题.本文以一个实际的脚本文件为例,说明格式转换的过程.        1. sh文件内容 本文中的文件名为 ...

  5. 把硬盘格式化成ext格式的cpu占用率就下来了

    把硬盘格式化成ext格式的cpu占用率就下来了我是使用ext4格式 @Paulz 还有这种事情? 现在是什么格式?- - ,你自己用top命令看一下啊就知道什么东西在占用cpu了下载软件一半cpu都用 ...

  6. Linux在什么样的从脚本文件数据库sh格式改变sql格式

    在软件开发过程中,经常参与Linux从下一个脚本文件数据库sh格式改变sql格式问题.在本文中,一个实际的脚本文件,例如.描述格式转换过程.        1. sh文件内容 本文中的文件名称为exa ...

  7. Excel 转 vCard格式、CSV格式

    Excel 转vCard格式(常用于Gmail, Yahoo, 163等).CSV格式(常用于Outlook, Foxmail等) 最近公司邮件通讯录需要更新,我就将原来的通讯录给删除了,准备重新导入 ...

  8. Intel格式与Motorola格式的区别

      Intel低字节在前 Motorola高字节在前    在进行CAN总线通信设计或者测试过程中,经常看到CAN总线信号的编码格式有两种定义:Intel格式与Motorola格式.究竟两种编码格式有 ...

  9. [python]html格式转md格式

    html格式转md格式 # 模块html2text pip install html2text/pip3 install html2text 测试: import html2text as ht te ...

随机推荐

  1. 【Mood-17】 github中在本地进行上传的时候出现ERROR: Repository not found. fatal: The remote end hung up unexpectedly

    一开始出现这个错误的时候还感觉很奇怪,我明明在在本地中相应的库文件夹命令中输入: vim ./git/config 将文件中的 [remote “origin"]部分去掉!

  2. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '

    mysql中如果字段使用了关键字,在插入和更新时会提示 You have an error in your SQL syntax; check the manual that corresponds ...

  3. 怒刷DP之 HDU 1029

    Ignatius and the Princess IV Time Limit:1000MS     Memory Limit:32767KB     64bit IO Format:%I64d &a ...

  4. POJ 1679 The Unique MST (最小生成树)

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22668   Accepted: 8038 D ...

  5. 快速调试chromium

    上一篇我们简单的将了在Ubuntu上编译chromium,android content_shell_apk的编译,一切顺利的就能生成apk.但是我们仅仅只是照搬了人家google开源的东西,作为一个 ...

  6. ORACLE-树状数据结构获取各层级节点信息

    平时工作中出报表时,要求分别列出员工的一级部门,二级部门....,在数据库中,部门表(unit)的设计一般为在表中维护每个部门的上级部门(pid字段),或者通过一个关联表(unit_link)维护层级 ...

  7. Objective-C 【Category-非正式协议-延展】

    -------------------------------------------  类别(Category)的声明和实现 实质:类别又叫类目,它其实是对类的一个拓展!但是他不同于继承后的拓展! ...

  8. Java 类成员的初始化顺序

    Java 类成员的初始化顺序 前言:开发中碰到一个Java文件中有很多的成员变量,包括静态和非静态的,还有很多的初始化方法,很好奇这些成员的初始化顺序,在这里作个研究.   1  无继承情况下的Jav ...

  9. AD查询1000条限制和解决方案

      公司的一个项目要从AD上取数据,为了测试性能,批量在AD上创建了2000多个用户.但是用java程序获取所有用户的时候会报错或者只能取到1000条数据.   条数据. 用org.springfra ...

  10. WebServiceException

    在用cxf做webservice的时候,在写客户端程序的时候,出现以下异常: Could not find wsdl:binding operation info for web method tes ...