• OID的编解码


    我们常见到OID的地方是SNMP和MIB,实际上理论上所有对象都可以有自己的ID。已存在的ID可以在http://www.oid-info.com/查到。这些ID在报文里并非字符串或直接的文本而是遵循的规则可以在https://docs.microsoft.com/zh-cn/windows/desktop/SecCertEnroll/about-object-identifier查到,但这个好像没有中文,我来通俗化的解释下:

       1. 整体OID是TLV的方式,以06标识开始,首先是一个字节表示长度,如09表示该OID由下面9个字节表示;
    
        2. 前两个字节(如为X和Y)被编码为一个字节40*X+Y,如1和2,编码的结果为40*1+2=42,也就是2a。
    
        3. 后面的数字若不超过127(即7个位可以表示的范围),则直接为1个字节表示,如04即表示4;若超过128,则使用多个字节表示,不管是2个字节、3个字节或是多个字节,最左边字节的最高位为1,如130的编码是0x81、0x02(1*128+2),840的编码是0x86、0x48(6*128+72)。
    
        4.举个整体的例子:sha256WithRSAEncryption的OID是1.2.840.113549.1.1.11的编码是06 09 2a 86 48 86 f7 0d 01 01 0b。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    如果比较懒,可以在线解码http://lapo.it/asn1js/:06开头,然后是长度,然后是编码,如上述4里的例子,可以直接贴到链接里进行解码。

    来自百度的解释:对象标识符(Object identifier, OID)又称为物联网域名是由ISO/IEC、ITU国际标准组织共同提出的标识机制,用于对任何类型的对象、概念或者“事物”进行全球无歧义、唯一命名。一旦命名,该名称终生有效。由于OID具有分层灵活、可扩展性强等特点,适合作为现有各种编码方案之间进行交换的元标识机制。

    1.关于ASN.1的介绍https://www.obj-sys.com/asn1tutorial/asn1only.html

    2.关于ASN.1编码的中文介绍度娘即可,英文的在https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf。
    3. BER和DER的区别https://blog.csdn.net/baidu_36649389/article/details/53538223。

  • 相关阅读:
    对象转json,json添加转义符
    HTML5期末大作业:基于html+css+javascript+jquery实现藏族文化15页【学生网页设计作业源码】
    数据结构与算法-队列
    设计模式-06-桥接模式
    Navicat 下载
    跨域原理及解决
    C++ Reference: Standard C++ Library reference: C Library: cwchar: wprintf
    QtC++与QUndoView详解
    机器学习笔记 - Ocr识别中的CTC算法原理概述
    c++ 图论学习3
  • 原文地址:https://blog.csdn.net/xingfuyusheng/article/details/133394884