当前位置: 首页 > news >正文

PHP实现OID(Object identifier)的编码和解码

转载于:https://bkssl.com/document/php_oid_encode_decode.html

<?phpclass ASN1ObjectIdentifier
{/*** OID字符串编码为二进制数据* @param string $oid 字符串形式的OID* @return string*/public static function encode($oid){$parts = explode('.', $oid);$parts = array_map(fn($t) => intval($t), $parts);$result = chr($parts[0] * 40 + $parts[1]);for ($i = 2; $i < count($parts); $i++) {$value = $parts[$i];if ($value <= 127) {$result .= chr($value);continue;}$substr = '';$flag = false;while ($value > 0) {$num7 = ($value & 0x7f);if ($flag) {$num7 = 0x80 | $num7;}$substr = chr($num7) . $substr;$value >>= 7;if (!$flag) $flag = true;}$result .= $substr;}return $result;}/*** 二进制数据解码为OID字符串* @param string $data 二进制数据* @param int $position 数据偏移位置* @param int $count OID所占字节大小* @return string*/public static function decode($data, $position, $count){$builder = '';$num2 = ord($data[$position]);$num3 = floor($num2 / 40);$num4 = $num2 % 40;$builder .= $num3;$builder .= '.';$builder .= $num4;$flag = true;$integer = 0;for ($i = 1; $i < $count; $i++) {$num6 = ord($data[$position + $i]);$num7 = $num6 & 0x7f;if ($flag) {$builder .= '.';$flag = false;}$integer = $integer << 7;$integer += $num7;if ($num6 == $num7) {$builder .= $integer;$integer = 0;$flag = true;}}return $builder;}
}

测试代码

$oid = '1.2.840.113549.1.1.1';
$bin = ASN1ObjectIdentifier::encode($oid);
echo bin2hex($bin) . "\r\n";
echo ASN1ObjectIdentifier::decode($bin, 0, strlen($bin)). "\r\n";//输出
//2a864886f70d010101
//1.2.840.113549.1.1.1

常见OID

'2.5.4.3': 'CN',
'2.5.4.4': 'Surname',
'2.5.4.5': 'SerialNumber',
'2.5.4.6': 'C',
'2.5.4.7': 'L',
'2.5.4.8': 'ST',
'2.5.4.9': 'Street',
'2.5.4.10': 'O',
'2.5.4.11': 'OU',
'2.5.4.12': 'T',
'2.5.4.13': 'Description',
'2.5.4.15': 'BusinessCategory',
'2.5.4.16': 'PostalAddress',
'2.5.4.17': 'PostalCode',
'2.5.4.20': 'TelephoneNumber',
'2.5.4.41': 'Name',
'2.5.4.42': 'GivenName',
'2.5.4.43': 'Initials',
'2.5.4.44': 'Generation',
'2.5.4.45': 'UniqueIdentifier',
'2.5.4.46': 'DnQualifier',
'2.5.4.54': 'DmdName',
'2.5.4.65': 'Pseudonym',
'2.5.4.97': 'OrganizationIdentifier',
'1.3.6.1.5.5.7.9.1': 'DateOfBirth',
'1.3.6.1.5.5.7.9.2': 'PlaceOfBirth',
'1.3.6.1.5.5.7.9.3': 'Gender',
'1.3.6.1.5.5.7.9.4': 'CountryOfCitizenship',
'1.3.6.1.5.5.7.9.5': 'CountryOfResidence',
'1.3.36.8.3.14': 'NameAtBirth',
'1.2.840.113549.1.9.1': 'E',
'1.2.840.113549.1.9.2': 'UnstructuredName',
'1.2.840.113549.1.9.8': 'UnstructuredAddress',
'0.9.2342.19200300.100.1.25': 'DC',
'0.9.2342.19200300.100.1.1': 'UID',
'2.5.29.9': 'SubjectDirectoryAttributes',
'2.5.29.14': 'SubjectKeyIdentifier',
'2.5.29.15': 'KeyUsage',
'2.5.29.16': 'PrivateKeyUsagePeriod',
'2.5.29.17': 'SubjectAlternativeName',
'2.5.29.18': 'IssuerAlternativeName',
'2.5.29.19': 'BasicConstraints',
'2.5.29.20': 'CrlNumber',
'2.5.29.21': 'ReasonCode',
'2.5.29.23': 'InstructionCode',
'2.5.29.24': 'InvalidityDate',
'2.5.29.27': 'DeltaCrlIndicator',
'2.5.29.28': 'IssuingDistributionPoint',
'2.5.29.29': 'CertificateIssuer',
'2.5.29.30': 'NameConstraints',
'2.5.29.31': 'CrlDistributionPoints',
'2.5.29.32': 'CertificatePolicies',
'2.5.29.33': 'PolicyMappings',
'2.5.29.35': 'AuthorityKeyIdentifier',
'2.5.29.36': 'PolicyConstraints',
'2.5.29.37': 'ExtendedKeyUsage',
'2.5.29.46': 'FreshestCrl',
'2.5.29.54': 'InhibitAnyPolicy',
'2.5.29.55': 'TargetInformation',
'2.5.29.56': 'NoRevAvail',
'2.5.29.60': 'ExpiredCertsOnCrl',
'1.3.6.1.5.5.7.1.1': 'AuthorityInfoAccess',
'1.3.6.1.5.5.7.1.2': 'BiometricInfo',
'1.3.6.1.5.5.7.1.3': 'QCStatements',
'1.3.6.1.5.5.7.1.4': 'AuditIdentity',
'1.3.6.1.5.5.7.1.11': 'SubjectInfoAccess',
'1.3.6.1.5.5.7.1.12': 'LogoType',
'1.3.6.1.4.1.11129.2.4.2': 'SCTList',
'1.2.840.113533.7.65.0': 'EntrustVersionInfo',
'1.3.6.1.4.1.311.20.1': 'AutoEnrollCtlUsage',
'1.3.6.1.4.1.311.20.2': 'CertificateType',
'1.3.6.1.4.1.311.20.2.1': 'EnrollmentAgent',
'1.3.6.1.4.1.311.20.2.2': 'KPSmartCardLogin',
'1.3.6.1.4.1.311.20.2.3': 'NTPrincipalName',
'1.3.6.1.4.1.311.20.3': 'CertManifold',
'1.3.6.1.4.1.311.21.1': 'CaKeyCertIndexPair',
'2.16.840.1.113730.1.1': 'NetscapeCertType',
'2.23.42.7.0': 'HashedRootKey',
'1.2.840.113549.1.9.15': 'SMIMECapabilities',
'2.16.840.1.113730.1.13': 'NetscapeComment',
'1.3.6.1.5.5.7.1.24': 'TLSFeatures',
'1.2.840.113549.2.2': 'MD2',
'1.2.840.113549.2.3': 'MD4',
'1.2.840.113549.2.5': 'MD5',
'1.3.14.3.2.26': 'SHA1','1.2.840.113549.1.1.11': 'sha256WithRSAEncryption',
'1.2.840.113549.1.1.5': 'sha1WithRSAEncryption',
'1.2.840.113549.1.1.4': 'md5WithRSAEncryption',
'1.2.840.113549.1.1.2': 'md2WithRSAEncryption',
'1.2.840.113549.1.1.1': 'RsaEncryption','2.16.840.1.101.3.4.2.4': 'SHA224',
'2.16.840.1.101.3.4.2.3': 'SHA512',
'2.16.840.1.101.3.4.2.2': 'SHA384',
'2.16.840.1.101.3.4.2.1': 'SHA256',
'1.3.36.3.2.1': 'RIPEMD160',
'1.3.36.3.2.2': 'RIPEMD128',
'1.3.36.3.2.3': 'RIPEMD256',
'1.2.643.2.2.9': 'GOST3411',
'1.2.840.10045.4.1': 'Sha1WithECDsa',
'1.2.840.10045.4.3.1': 'Sha224WithECDsa',
'1.2.840.10045.4.3.2': 'Sha256WithECDsa',
'1.2.840.10045.4.3.3': 'Sha384WithECDsa',
'1.2.840.10045.4.3.4': 'Sha512WithECDsa',
'1.2.840.10040.4.3': 'id-dsa-with-sha1',
'1.2.840.10045.2.1': 'ECPublicKey',
'1.2.840.10045.3.1.7': 'Prime256v1',
'1.3.6.1.5.5.7.3.1': 'ServerAuth',
'1.3.6.1.5.5.7.3.2': 'ClientAuth',
'1.3.6.1.5.5.7.3.3': 'CodeSigning',
'1.3.6.1.5.5.7.3.4': 'EmailProtection',
'1.3.6.1.5.5.7.3.5': 'IpsecEndSystem',
'1.3.6.1.5.5.7.3.6': 'IpsecTunnel',
'1.3.6.1.5.5.7.3.7': 'IpsecUser',
'1.3.6.1.5.5.7.3.8': 'TimeStamping',
'1.3.6.1.5.5.7.3.9': 'OCSPSigning',
'1.3.6.1.5.5.7.3.19': 'Wireless',
'1.3.6.1.5.5.7.48.1': 'OCSP',
'1.3.6.1.5.5.7.48.2': 'caIssuers',
'2.23.140.1.2.1': 'DomainValidated',
'1.3.6.1.4.1.44947.1.1.1': '',
'1.3.6.1.5.5.7.2.1': 'Cps',
'1.3.6.1.5.5.7.2.2': 'Unotice',

在这里插入图片描述

相关文章:

PHP实现OID(Object identifier)的编码和解码

转载于&#xff1a;https://bkssl.com/document/php_oid_encode_decode.html <?phpclass ASN1ObjectIdentifier {/*** OID字符串编码为二进制数据* param string $oid 字符串形式的OID* return string*/public static function encode($oid){$parts explode(., $oid);$pa…...

架构设计笔记-12-信息系统架构设计理论与实践

目录 知识要点 案例分析 1.Java企业级应用系统 2.c/s架构&#xff0c;b/s架构 知识要点 软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式。架构风格定义了一类架构所共有的特征&#xff0c;主要包括架构定义、架构词汇表和架构约束。 数据挖掘是从数据库的大…...

【Power Compiler手册】15.多角多模式设计中的功耗优化

多角多模式设计中的功耗优化 可以使用多个运行条件和多种模式进行综合的设计被称为多角多模式设计。Design Compiler Graphical工具扩展了拓扑技术,以分析和优化这些设计。 有关多角多模式技术支持的综合工具的更多信息,请参见以下主题: • 优化多角多模式设计 • 报告命…...

关于HalconDeeplearn中的语义分割的实现

1.读取数据和数据集 read_dl_model (C:/Users/user/Desktop/大蒜测试/包裹/model_训练-240926-191345_opt.hdl, DLModelHandle) read_dict(C:/Users/user/Desktop/大蒜测试/包裹/model_训练-240926-162708_opt_dl_preprocess_params.hdict,[], [], DLDataset) 2.读取识别图片 I…...

【STL】AVLTree模拟实现

AVLTree模拟实现 1 前言2 AVL树的插入2.1 平衡因子不继续向上更新的情况2.2 平衡因子变为2或者-2&#xff0c;发生旋转2.2.1 左单旋2.2.2 右单旋2.2.3 左右双旋2.2.4 右左双旋 3 代码 1 前言 二叉搜索树的不足&#xff1a;如果出现极端情况&#xff0c;效率会变得很低。 AVL&am…...

无极低码课程【tomcat部署windows环境厂家乱码处理】

windows 下tomcat安装 下载地址一:https://tomcat.apache.org/download-90.cgi 下载地址二:https://archive.apache.org/dist/tomcat/ 解压tomcat,进入bin目录运行startup.bat...

注册安全分析报告:惠农网

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…...

Qualitor checkAcesso.php 任意文件上传漏洞复现(CVE-2024-44849)

0x01 漏洞概述 Qualitor 8.24及之前版本存在任意文件上传漏洞,未经身份验证远程攻击者可利用该漏洞代码执行,写入WebShell,进一步控制服务器权限。 0x02 复现环境 FOFA:app="Qualitor-Web" 0x03 漏洞复现 PoC POST /html/ad/adfilestorage/request/checkAcess…...

PHP-FPM和FastCGI

文章目录 前言一. FastCGI1.定义2.工作方式3.协议4.架构5.工作原理&#xff08;请求生命周期&#xff09; 二. PHP-FPM1.定义&#xff1a;2.特性3.进程管理模式4.工作流程 三.关系与应用四.配置示例五.性能优化六.配置选项七.常见问题及解决方案 前言 PHP-FPM 是基于 FastCGI …...

【Linux快速入门(二)】Linux与ROS学习之编译基础(make编译)

目录 零.前置篇章 一.make的由来 二.安装make 三.编写Makefile 四.编译运行 五.删除可执行文件 零.前置篇章 第一篇【Linux快速入门】Linux与ROS学习之编译基础&#xff08;gcc编译&#xff09;_linuxros-CSDN博客 一.make的由来 "make"是一个用于自…...

jupyterlab的安装与使用攻略/包括汉化方法

官网链接 Project Jupyter | Home 1.第一步安装 打开控制台 使用pip工具安装 pip install jupyterlab 如图 2.安装成功后启动 jupyter lab 会自动启动它的web页面 然后就可以正常使用咯&#xff01;&#xff01; 如果需要更换浏览器访问 新开控制台执行下面命令 jupy…...

std::list

std::list是C标准库中的一个序列容器&#xff0c;它提供了双向链表的功能。std::list允许在序列的任何位置高效地插入和删除元素&#xff0c;而不会引起其他元素的移动&#xff0c;这使得std::list在需要频繁插入和删除操作的场景中非常有用。 std::list的特性&#xff1a; 双…...

opencv-rust 系列2: camera_calibration

opencv-rust 系列2: camera_calibration 前言: 这里只是opencv-rust自带示例的中文注解. 略微增加了一些代码也是我在调试时用到的. 说明: camera_calibration.rs是opencv-rust自带的示例, 在examples目录中可以找到,我增加了一些中文注释如下.如需运行可以在项目根目录执行命…...

JVM和GC案例详解

接上文JVM环境配置说明&#xff1a;上文博客 一、JVM远程连接设置 1. JMX方式连接(这种方式没有GC监控)&#xff0c;设置如下 2. 连接成功后可以查看基础配置参数(和服务器配置一致) 2. jstatd方式连接(这种方式没有CPU监控) 添加jstatd方式连接 双击Tomcat&#xff0…...

postgreSql下载安装

一、下载 官网&#xff1a;PostgreSQL: The worlds most advanced open source database 二、安装 1.找到.exe文件&#xff0c;双击安装 2.跟着安装向导操作 三、启动...

GPT-SOVIT模型部署指南

一、模型介绍 强大的小样本语音转换和文本转语音 WebUI。 具有以下特征&#xff1a; 零样本 TTS&#xff1a; 输入 5 秒的声音样本并体验即时文本到语音的转换。少量样本 TTS&#xff1a; 仅使用 1 分钟的训练数据对模型进行微调&#xff0c;以提高语音相似度和真实感。跨语…...

怎么定时发朋友圈?

要实现微信朋友圈的定时发布&#xff0c;可以采用以下几种方法&#xff1a; 1、 绑定QQ号并使用QQ空间定时功能&#xff1a; 于微信和QQ的紧密联系&#xff0c;可以通过绑定QQ号&#xff0c;利用QQ空间的定时发布功能来间接实现微信朋友圈的定时发布。首先&#xff0c;在QQ空…...

如何利用phpstudy创建mysql数据库

phpStudy诞生于2007年&#xff0c;是一款老牌知名的PHP开发集成环境工具&#xff0c;产品历经多次迭代升级&#xff0c;目前有phpStudy经典版、phpStudy V8&#xff08;2019版&#xff09;等等&#xff0c;利用phpstudy可以快速搭建一个mysql环境&#xff0c;接下来我们就开始吧…...

五、Linux之Vi和Vim编辑器

基本介绍 Vi Linux 系统会内置 vi 文本编辑 Vim 具有程序编辑的能力&#xff0c;可以看做是 Vi 的增强版本&#xff0c;可以主动的以字体颜色辨别语法的正确性&#xff0c;方便程序设计。 代码补完、编译及错误跳转等方便编程的功能特别丰富 常用的三种模式 正常模式 以 vim …...

git删除错误的commit

文章目录 1、git删除错误的commit2、.gitignore配置文件不生效的问题 1、git删除错误的commit git的流程如图&#xff1a; 当某次失误造成commit的版本有问题&#xff0c;需要回退到正常的版本修改后重新add。 首先通过git log查看commit提交记录&#xff0c;可以看到HEAD-…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说&#xff0c;在叠衣服的过程中&#xff0c;我会带着团队对比各种模型、方法、策略&#xff0c;毕竟针对各个场景始终寻找更优的解决方案&#xff0c;是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...

若依登录用户名和密码加密

/*** 获取公钥&#xff1a;前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...

规则与人性的天平——由高考迟到事件引发的思考

当那位身着校服的考生在考场关闭1分钟后狂奔而至&#xff0c;他涨红的脸上写满绝望。铁门内秒针划过的弧度&#xff0c;成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定"&#xff0c;构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...