ASN.1的一些理解

2023-11-16

为什么要有ASN.1这个东西?

我们知道,像C++、Java这种高级语言,对于计算机来说都要转化为二进制代码才能识别和操作。这就涉及到序列化和反序列化这两个概念,将一个对象序列化成二进制代码,就可以保存成文本或者利用网络传输到远程,与序列化相对的,就是反序列化,从文本或者网络中读取的二进制代码就可以变换成最初的对象。

就好比网购一个桌子,商家把桌腿桌板螺丝钉拆开,并附上安装教程一起打包快递,我收到后,按照教程重新将桌子组装起来。

为了解决高级语言中结构化数据在网络传输中的结构关系能送达目的地进行还原,历史上出现了以下几种数据序列化的方法:ASN.1,XML,Json等。

ASN.1是什么?

 ASN.1(abstract syntax notation one)是一种对分布计算机系统之间交换的数据信息进行抽象描述的规范化语言。抽象语法只描述数据的结构形式,与具体的编码格式无关,同时也不涉及这些数据结构在计算机内如何存放。

ASN.1把我们在高级编程语言定义的比如int、string和bool这些数据结构重新定义,将所有的数据结构分为两大类:基本类型和结构类型。

基本类型:

布尔 BOOLEAN 整型 INTEGER 比特串 BIT STRING
NULL 对象标识 OBJECT INDENTIFIER 可打印字符串 PrintableString
IA5字符串 IA5String 可见字符串 VisibleString 数字字符串 NumericString
BMP字符串 BMPString 枚举类型 Enumerated UTC时间类型 UTCTime
Generalized时间类型 GeneralizedTime 任意类型 ANY

复合类型:

有序成员固定结构 SEQUENCE
无序成员固定结构 SET
有序成员待定结构 SEQUENCE OF
无须成员待定结构 SET OF
选择类型 CHOICE

经过ASN.1重定义后的数据类型几乎涵盖了现实生活中绝大部分的数据类型,具有通用性。

ASN.1只是约定了数据抽象描述,并不限定它的编码规则。对于同一个ASN.1描述的数据,用户可以根据自己的需求使用不同的编码规则进行编码。

目前ASN.1的标准编码规则有:BER(Basic Encoding Rules)、CER(Canonical Encoding Rules)、DER(Distinguished Encoding Rules)、PER(Packed Encoding Rules)和XER,XML Encoding Rules)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASN.1的一些理解 的相关文章

  • python3「非阻塞socket」报错 “BlockingIOError: [Errno 11]“ 复现以及分析解决

    梦想还在 生活当继续 一 前言 linux 下 用 python 的非阻塞 socket 通信时 遇到了 BlockingIOError Errno 11 Resource temporarily unavailable 错误 翻译报错信息
  • cocos2d-x客户端与Java服务器的通信(一)

    o 貌似自己已经有一段时间没有写博客了 其实主要原因还是觉得自己水平有限 加上上班实在是太忙 实在抽不出时间来写博客 言归正传 大家都知道 在网络游戏开发中 网络通信一直是个比较大的难题 一个服务器可能要同时处理几千上万甚至上百万的用户数据
  • 什么是节点光端机?总线型光端机有哪些优势?

    节点式光端机又称总线型光端机 其准确的定义是采用单 双纤链路式组网形式的图像传输系统 也被称为链路式光端机 那么 节点式光端机具体是什么呢 总线型光端机又有哪些优势呢 接下来我们就跟随飞畅科技的小编一起来详细了解下吧 什么是节点光端机 节点
  • TCP实现socket通信(python)

    socket简介 UDP实现socket通信 python TCP实现socket通信 python 1 套接字工作流程 服务器端先初始化Socket 建立一个套接字 与端口绑定 bind 用 bind 函数来绑定一个端口号和 IP 地址
  • 43黑马QT笔记之Qt下Tcp/Udp通信过程

    43黑马QT笔记之Qt下Tcp Udp通信过程 前提 Qt下的网络通信需要加上 QT newwork 模块 1 Qt下Tcp的通信过程 1 共有三个套接字 客户端有一个QTcpServer监听套接字 服务端有两个 分别是QTcpServer
  • 关于非同一局域网下两台设备之间的网络通信(服务器的作用)

    看过很多关于局域网下的两台设备之间的通信方式 最多的就是通过socket进行tcp ip通信 建立一个服务端 再建立一个客户端 客户端向服务端发起请求连接 然后再进行两端的通信 但发现其实这却存在着很多的问题与不足 如果是不在同一局域网下的
  • Wireshark抓包解释说明

    Wireshark与对应的OSI七层模型 TCP三次握手 TCP三次握手的理论知识 wireshark三次握手对应的报文情况 图中可以看到wireshark截获到了三次握手的三个数据包 第四个包才是HTTP的 这说明HTTP的确是使用TCP
  • 扩频技术详解

    扩频是什么 扩频是一种信息处理传输技术 扩频技术是利用同欲传输数据 信息 无关的码对被传输信号扩展频谱 使之占有远远超过被传送信息所必需的最小带宽 扩频技术原理 在发端输入的信息先经信息调制形成数字信号 然后由扩频码发生器产生的扩频码序列去
  • netty权威指南学习笔记二——netty入门应用

    经过了前面的NIO基础知识准备 我们已经对NIO有了较大了解 现在就进入netty的实际应用中来看看吧 重点体会整个过程 按照权威指南写程序的过程中 发现一些问题 当我们在定义handler继承ChannelHanderAdapter时候
  • 通过socket获取对方ip地址

    struct sockaddr in sa int len sizeof sa if getpeername sockfd struct sockaddr sa len printf 对方IP s inet ntoa sa sin addr
  • ASN.1的一些理解

    为什么要有ASN 1这个东西 我们知道 像C Java这种高级语言 对于计算机来说都要转化为二进制代码才能识别和操作 这就涉及到序列化和反序列化这两个概念 将一个对象序列化成二进制代码 就可以保存成文本或者利用网络传输到远程 与序列化相对的
  • 网络层(四)

    网络层 我们说过 网络层主要讲的就是ip编址和路由选择算法 更准确的说 应该是网际IP协议 网际IP协议主要说明了各个主机和服务器的ip编址规则 了解IP编址前 我们需要知道IP数据报 IP数据报在网络层中传输 我们看一下IP数据报的结构
  • Java NIO 的前生今世 之二 NIO Channel 小结

    Java NIO Channel 通常来说 所有的 NIO 的 I O 操作都是从 Channel 开始的 一个 channel 类似于一个 stream java Stream 和 NIO Channel 对比 我们可以在同一个 Chan
  • 未加密的 SSL 协议?

    是否可以通过未加密的 https 发送消息 例如 要求进行证书验证和授权 但不加密通过套接字发送的实际数据 是的 TLS 和 SSL 支持 无加密 模式 所讨论的特定客户端和服务器是否配置为启用是一个单独的问题 服务器有可能默认启用这些密码
  • Android 的应用程序/签名验证如何工作?

    我想用两件事作为这个问题的序言 这样我就可以缩小我的实际问题范围 a 我以前做过软件开发 但从未针对 Android b 我熟悉 PKI 加密 散列和数字签名等等等等 话虽这么说 我无法找到有关 Android 在何处以及如何验证应用程序创
  • Tomcat SSL:无法找到请求目标的有效证书路径

    我正在尝试访问应用程序中的网址 但收到此错误 1771426 http bio 8180 exec 15 ERROR gadget GadgetValidatorServlet wsdl exception WSInvokerExcepti
  • git 验证可信标签

    我想包括git tag v命令进入部署过程以捕获未签名的标签或由不可信的 GPG 密钥签名的标签 该命令返回退出代码为0如果标签具有有效签名 但不关心签名密钥是否可信 我不想手动 grep 结果 GPG 消息 我还没有尝试过 文档也没有提到
  • 在 Python 中生成 CSR

    我正在尝试在 Python 中生成 CSR 而不使用 OpenSSL 如果有人能指出正确的方向 我将非常感激 我假设你不想使用命令行 openssl 本身 Python 库就可以了 这是我编写的用于创建 CSR 的辅助函数 它从生成的密钥对
  • CMP 证书请求

    我使用下面的代码将 CMP 证书请求发送到端点 public static void main String args try System out println In final BigInteger certReqId BigInte
  • 向 iPhone 模拟器添加自签名证书?

    我的 API 端点有一个自签名证书 我正在尝试使用模拟器测试一些内容 但收到 不受信任的服务器证书 我尝试在模拟器上使用 safari 下载 crt 文件 但这似乎不起作用 iPhone Simulator 从哪里获取钥匙串 如何添加受信任

随机推荐

  • IAR常见报错

    右键进入函数出错 project gt clean
  • 利用python进行数据分析之数据聚合和分组运算--小白笔记

    GroupBy机制 split apply combine 拆分 应用 合并 import pandas as pd import numpy as np df pd DataFrame key1 a a b b a key2 one tw
  • 找不到匹配的host key算法

    vim etc ssh sshd config
  • 《WebRTC系列》实战 Web 端支持 h265 硬解

    1 背景 Web 端实时预览 H 265 需求一直存在 但由于之前 Chrome 本身不支持 H 265 硬解 软解性能消耗大 仅能支持一路播放 该需求被搁置 去年 9 月份 Chrome 发布 M106 版本 默认开启 H 265 硬解
  • raw格式详解

    raw格式是camera sensor直接输出的格式 每个像素点表示一个颜色分量B G或R 注意 这句话不准确 红外相机的sensor和彩色相机的sensor有些不同 有的红外相机的sensor输出的raw data就是亮度值 即灰度值 输
  • Android Flutter开发环境搭建

    1 搭建 Flutter 开发环境 本栏亦在快速上手Android Flutter Flutter框架就不介绍了 框架这个东西怎么说呢 对于大部分人来说只是了解即可 如需了解的话 可以度娘资料很多 本节我们主要看下如何在Windwos下搭建
  • Kotlin协程实现原理:CoroutineScope,看完不懂你砍我!墙裂建议收藏。

    今天我们来聊聊Kotlin的协程Coroutine 文末有为大家准备的彩蛋 如果你还没有接触过协程 推荐你先阅读这篇入门级文章What 你还不知道Kotlin Coroutine 如果你已经接触过协程 相信你都有过以下几个疑问 协程到底是个
  • 一个码稿人自述:什么样的文档产品适合我?|深度吐槽

    关注ITValue 看企业级最新鲜 最价值报道 图片来源 Unsplash 钛媒体打工人 媒体相关从业经验4 5年 文档使用重度患者 今天以我曾经用过的 和现在主流的一些文档产品为例 来谈谈我的使用体验 以及什么样的文档适合我 一 我与文档
  • [编程工具]MarkDown编辑查看以及使用语法

    目录 0 前言 1 markDown语法 2 markDown 3 MD正确打开方式 4 结尾 结束啦感谢观看 5 参考连接 0 前言 本文介绍了markDown的编辑查看 使用浏览器查看以及Vscode中查看编辑MD 最后介绍了MD的常用
  • python解析佳明fit文件

    使用 fitparse 解析 佳明 fit 文件 以下示例测试环境为 python 3 8 fitparse 1 2 fitparse 安装 pip3 install fitparse 使用方式 import fitparse from d
  • 蓝牙通讯

    蓝牙通讯 简介 蓝牙API 所需权限 使用蓝牙的步骤 普通调用案例 通讯案例 简介 蓝牙 是一种支持设备短距离通信 一般10m内 且无阻隔媒介 的无线电技术 能在包括移动电话 PDA 无线耳机 笔记本电脑等众多设备之间进行无线信息交换 利用
  • 数据库创建索引和删除索引的方式总结

    一 创建索引 1 1 使用Alter创建索引 1 添加主键索引 特点 数据列不允许重复 不能为null 一张表只能有一个主键 Mysql主动将该字段进行排序 ALTER TABLE 表名 ADD Primary key col 2 添加唯一
  • MySQL安装与启动

    1 MySQL安装包下载 下载地址 https dev mysql com downloads mysql 这里我的电脑是WIN764位的 大家根据自己的电脑自己选择要下载的包 2 解压安装 解压后进入到Windows的DOS命令行下 切换
  • python股票量化交易系统_利用python建立股票量化交易系统(一)

    从今天开始正式开启我的博客之旅 博客内容全部是我自己的量化心得 主要还是为自己将来中工作之中遇到相似问题 可以方便的找到答案 如果能帮到有相似问题的其他同学 我也很开心 如果帮不到的话 不喜勿喷 如果文章中有什么不对的地方 欢迎批评指正 建
  • VI编辑器的使用常用快捷方式编辑命令

    VI编辑器的使用常用快捷方式编辑命令 一 VI编辑器的工作模式 1 VI编辑器有以下三种工作模式 命令模式 输入模式 末行模式 2 不同模式之间的切换 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img 7BrI0o
  • 【LInux】基础开发工具的使用

    文章目录 一 Linux的应用市场 yum 1 什么是yum 2 为什么要有yum 3 如何使用yum 3 1 前提条件 3 2 搜索软件 3 3 安装软件 3 4 卸载软件 二 Linux的文本编辑器 vim 1 什么是vim 2 为什么
  • Java中的线程

    一 程序 进程 线程之间的关系 程序 进程和线程是计算机中重要的概念 它们描述了不同层次上的执行和管理方式 程序是指由一系列指令组成的代码文件 它定义了算法和逻辑 用来解决特定的问题 程序本身是静态的 只有在被加载到内存并被操作系统调度执行
  • SSM框架(Spring+SpringMVC+MyBatis)

    SSM Spring SpringMVC MyBatis 框架集由Spring SpringMVC MyBatis三个开源框架整合而成 常作为数据源较简单的web项目的框架 Spring是一个开源框架 Spring是于2003 年兴起的一个
  • 思科CISCO常用命令汇总

    视图模式介绍 1 普通视图router gt 2 特权视图router 在普通模式下输入enable 3 全局视图router config 在特权模式下输入configt 4 接口视图router config if 在全局模式下输入in
  • ASN.1的一些理解

    为什么要有ASN 1这个东西 我们知道 像C Java这种高级语言 对于计算机来说都要转化为二进制代码才能识别和操作 这就涉及到序列化和反序列化这两个概念 将一个对象序列化成二进制代码 就可以保存成文本或者利用网络传输到远程 与序列化相对的