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. Java Properties类

    Properties 是哈希表的一个子类.它是用来维持值列表,其中的键是一个字符串,值也是一个字符串. Properties类被许多其他的Java类使用.例如,它是对象通过System.getProp ...

  2. php 短信网关短信内容不能有空格

    最近在做一个短信通知功能,接口参数都按文档写好了,就是不能发送短信,查了半天,原来是短信内容有空格,之前短信用的英文标点符号,符号后都有一个空格,用了date('Y-m-d H,i,s')函数,后来把 ...

  3. Jquery 实现点击一个页面跳转后在另外一个页面显示指定位置

    <script> $(function(){ var isTarget = '<?php echo $_GET['target']; ?>'; if (isTarget != ...

  4. poj 3689 树形dp

    思路: 每个点有三种状态,本身有塔,被子节点的塔覆盖,被父节点的塔覆盖. #include<map> #include<set> #include<cmath> # ...

  5. CKEditor配置及使用

    注:使用CKEditor版本为js版本的CKEditor 4,所有配置均参考自CKEditor官方API:http://docs.ckeditor.com/,以及实践经验 一.快速使用 1.引入CKE ...

  6. html2canvas 踩坑总结

    需求:将html表格导出为图片,表格可以自己编辑数据,并适配各种屏幕大小.上网搜了下,找到了html2canvas,一开始使用的是最新版0.5.0,最终因为需要支持自定义div编辑框自动换行选择了v0 ...

  7. 话说Centos下nginx,php,mysql以及phpmyadmin的配置

    大话centos下部署phalcon框架 Centos还是ubuntu? 当我沿用这个标题的时候,心里在想"我能说我之前用的windows吗?",windows下xampp,wam ...

  8. C# WinForm 调用WebService

    在Winform中对数据库进行操作缺乏安全性,因而可以使用Winform调用WebService来实现对数据库的各种操作. 在VS2010中,创建一个Web服务程序,第一:创建一个空的Web应用程序, ...

  9. DWZ 验证 CLASS 规则

     验证:格式  class="XXXX" 即可验证. required: "必填字段",  remote: "请修正该字段",  email ...

  10. Windows Kernel Way 1:Windows内核调试技术

    掌握Windows内核调试技术是学习与研究Windows内核的基础,调试Windows内核的方式大致分为两种: (1)通过Windbg工具在Windows系统运行之初连接到Windows内核,连接成功 ...