TLV格式是什么格式
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格式是什么格式的更多相关文章
- AngularJS过滤器filter-时间日期格式-渲染日期格式-$filter
今天遇到了这些问题索性就 写篇文章吧 话不多说直接上栗子 不管任何是HTML格式还是JS格式必须要在 controller 里面写 // new Date() 获取当前时间 yyyy-MM-ddd ...
- C#RSA算法实现+如何将公钥为XML格式转为PEM格式,给object-C使用
.net中,处于安全的考虑,RSACryptoServiceProvider类,解密时只有同时拥有公钥和私钥才可以.原因是公钥是公开的,会被多人持有.这样的数据传输是不安全的.C#RSA私钥加密,公钥 ...
- RSA密钥之C#格式与Java格式转换
前言 最近由于项目需求,服务端由c#编写,客户端由java编写.通信数据使用RSA非对称加密.但是java和c#生成的密钥格式是不一样的,所以需要转换格式才可以正常使用.网上搜到使用java进行格式转 ...
- Linux下如何将数据库脚本文件从sh格式变为sql格式
在从事软件开发的过程中,经常会涉及到在Linux下将数据库脚本文件从sh格式变为sql格式的问题.本文以一个实际的脚本文件为例,说明格式转换的过程. 1. sh文件内容 本文中的文件名为 ...
- 把硬盘格式化成ext格式的cpu占用率就下来了
把硬盘格式化成ext格式的cpu占用率就下来了我是使用ext4格式 @Paulz 还有这种事情? 现在是什么格式?- - ,你自己用top命令看一下啊就知道什么东西在占用cpu了下载软件一半cpu都用 ...
- Linux在什么样的从脚本文件数据库sh格式改变sql格式
在软件开发过程中,经常参与Linux从下一个脚本文件数据库sh格式改变sql格式问题.在本文中,一个实际的脚本文件,例如.描述格式转换过程. 1. sh文件内容 本文中的文件名称为exa ...
- Excel 转 vCard格式、CSV格式
Excel 转vCard格式(常用于Gmail, Yahoo, 163等).CSV格式(常用于Outlook, Foxmail等) 最近公司邮件通讯录需要更新,我就将原来的通讯录给删除了,准备重新导入 ...
- Intel格式与Motorola格式的区别
Intel低字节在前 Motorola高字节在前 在进行CAN总线通信设计或者测试过程中,经常看到CAN总线信号的编码格式有两种定义:Intel格式与Motorola格式.究竟两种编码格式有 ...
- [python]html格式转md格式
html格式转md格式 # 模块html2text pip install html2text/pip3 install html2text 测试: import html2text as ht te ...
随机推荐
- js兼容性问题
javscript 浏览器兼容性问题: scrollTop = document.documentElement.scrollTop || document.body.scrollTop; scrol ...
- 【阿里云产品公测】OTS使用之简单线上产品实践基于PythonSDK
阿里云用户:morenocjm 实践是检验真理的唯一标准,学习技术需要通过实践过程中的不断尝试,才能够快速掌握要领.OTS是构建在阿里云飞天分布式系统之上的NoSQL数据库服务,提供海量结构化数据的存 ...
- 【Shell脚本学习17】Shell case esac语句
case ... esac 与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构. case 语句匹配一个值或一个模式,如果匹配成功,执行相匹配的命令.case语句格式如下: ...
- Jqeury获取table当前行与指定列
今天遇到了一个Jqeury获取table当前行与指定列的问题: 大概的实现要求是一个页面中,上面有几个input输入框,下面有一个table,当在输入框中输入内容的时候,点击添加按钮的时候,在下面ta ...
- vb6.0如何让窗体跟随鼠标运动
首先将form的boderstyle属性设为0 Dim movesScreen As Boolean Dim mousX As Integer Dim mousY As Integer Dim cur ...
- Visual Studio 扩展包(.vsix)制作
前言:上篇介绍了 Visual Studio扩展工具添加与卸载,本编要介绍的是Visual Studio 扩展包(.vsix)的制作. 方法: ①.下载并安装Visual Studio 2010 SD ...
- 给VPS装桌面
转自:百度经验 致谢! 1.首先我们要先升级一下软件源给安装桌面环境做准备. 执行命令:apt-get update 2.安装桌面环境或窗口管理器: apt-get install xubunt ...
- nfa转dfa,正式完成
为了加速转换的处理,我压缩了符号表.具体算法参考任何一本与编译或者自动机相关的书籍. 这里的核心问题是处理传递性闭包,transitive closure,这个我目前采取的是最简单的warshall算 ...
- poj 1947 树形dp
思路:dp[i][j]表示,以i节点为根,删去j个节点最少要断几条边. 那么dp[u][j]=min(dp[u][j],dp[v][k]+dp[u][j-k]);//选取最优状态 dp[u][j]=m ...
- Macbook之设置Finder显示文件完整路径
终端里输入:defaults write com.apple.finder _FXShowPosixPathInTitle -bool TRUE;killall Finder 回复输入:default ...