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. [JavaEE] WEB-INF有关的目录路径总结

    1.资源文件只能放在WebContent下面,如 CSS,JS,image等.放在WEB-INF下引用不了. 2.页面放在WEB-INF目录下面,这样可以限制访问,提高安全性.如JSP,html 3. ...

  2. 安卓弹出对话框——Alertdialog

    在Android开发当中,在界面上弹出一个Dialog对话框使我们经常需要做的,本篇随笔将详细的讲解Dialog对话框这个概念,包括定义不同样式的对话框. 一.Dialog 我们首先来看看androi ...

  3. Java学习笔记——字符串常用函数

    class JavaTest4_String { public static void main(String[] args) { String str1 = "IOS,ANDROID,BB ...

  4. ASCII码表 char(9),char(10),char(13)等

    char(9)   水平制表符 char(10) 换行 char(13) 回车 测试ASCII码的方法: 在记事本中,按住ALT键,同时用小键盘输入十进制的ASCII码,然后松手,就可以看到效果了! ...

  5. 精通CSS高级Web标准解决方案(1-2 层叠与特殊性)

     层叠与特殊性 选择器的特殊性分成四个等级,a.b.c . d 如果样式是行内样式,那么a=1 b=ID选择器的总数 c=类.伪类.属性选择器的总数 d=标签选择器与伪元素选择器数量 例如:style ...

  6. js 回车键 跳转到下一个输入框

    window.document.onkeydown(){ if(event.keyCode==13) event.keyCode=9; }

  7. WingIde的快捷键

     tab:自动补全    Alt+1:打开所有折叠    Alt+2:折叠所有classes    Alt+3:折叠所有函数和类    Alt+Backspace:删除光标所在单词的光标前的部分    ...

  8. 第03篇. 标准Web项目Jetty9内嵌API简单启动

    一直以来,想改变一些自己早已经习惯的事情. 到了一定年龄,便要学会寡言,每一句话都要有用,有重量. 喜怒不形于色,大事淡然,有自己的底线. --胖先生 昨天,简单的说了一下关于Jetty9的配置,大家 ...

  9. ZOV压敏电阻

    http://www.zov.net.cn/download/spd_07D.htm http://item.taobao.com/item.htm?spm=a1z10.5.w4002-1369342 ...

  10. JQ笔记

    参数形式$("input:text",document.forms[0])选择form[0]所有input=text$("<p>123</p>&q ...