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)的编码和解码
转载于: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架构,b/s架构 知识要点 软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式。架构风格定义了一类架构所共有的特征,主要包括架构定义、架构词汇表和架构约束。 数据挖掘是从数据库的大…...
【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,发生旋转2.2.1 左单旋2.2.2 右单旋2.2.3 左右双旋2.2.4 右左双旋 3 代码 1 前言 二叉搜索树的不足:如果出现极端情况,效率会变得很低。 AVL&am…...
无极低码课程【tomcat部署windows环境厂家乱码处理】
windows 下tomcat安装 下载地址一:https://tomcat.apache.org/download-90.cgi 下载地址二:https://archive.apache.org/dist/tomcat/ 解压tomcat,进入bin目录运行startup.bat...
注册安全分析报告:惠农网
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...
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.工作原理(请求生命周期) 二. PHP-FPM1.定义:2.特性3.进程管理模式4.工作流程 三.关系与应用四.配置示例五.性能优化六.配置选项七.常见问题及解决方案 前言 PHP-FPM 是基于 FastCGI …...
【Linux快速入门(二)】Linux与ROS学习之编译基础(make编译)
目录 零.前置篇章 一.make的由来 二.安装make 三.编写Makefile 四.编译运行 五.删除可执行文件 零.前置篇章 第一篇【Linux快速入门】Linux与ROS学习之编译基础(gcc编译)_linuxros-CSDN博客 一.make的由来 "make"是一个用于自…...
jupyterlab的安装与使用攻略/包括汉化方法
官网链接 Project Jupyter | Home 1.第一步安装 打开控制台 使用pip工具安装 pip install jupyterlab 如图 2.安装成功后启动 jupyter lab 会自动启动它的web页面 然后就可以正常使用咯!! 如果需要更换浏览器访问 新开控制台执行下面命令 jupy…...
std::list
std::list是C标准库中的一个序列容器,它提供了双向链表的功能。std::list允许在序列的任何位置高效地插入和删除元素,而不会引起其他元素的移动,这使得std::list在需要频繁插入和删除操作的场景中非常有用。 std::list的特性: 双…...
opencv-rust 系列2: camera_calibration
opencv-rust 系列2: camera_calibration 前言: 这里只是opencv-rust自带示例的中文注解. 略微增加了一些代码也是我在调试时用到的. 说明: camera_calibration.rs是opencv-rust自带的示例, 在examples目录中可以找到,我增加了一些中文注释如下.如需运行可以在项目根目录执行命…...
JVM和GC案例详解
接上文JVM环境配置说明:上文博客 一、JVM远程连接设置 1. JMX方式连接(这种方式没有GC监控),设置如下 2. 连接成功后可以查看基础配置参数(和服务器配置一致) 2. jstatd方式连接(这种方式没有CPU监控) 添加jstatd方式连接 双击Tomcat࿰…...
postgreSql下载安装
一、下载 官网:PostgreSQL: The worlds most advanced open source database 二、安装 1.找到.exe文件,双击安装 2.跟着安装向导操作 三、启动...
GPT-SOVIT模型部署指南
一、模型介绍 强大的小样本语音转换和文本转语音 WebUI。 具有以下特征: 零样本 TTS: 输入 5 秒的声音样本并体验即时文本到语音的转换。少量样本 TTS: 仅使用 1 分钟的训练数据对模型进行微调,以提高语音相似度和真实感。跨语…...
怎么定时发朋友圈?
要实现微信朋友圈的定时发布,可以采用以下几种方法: 1、 绑定QQ号并使用QQ空间定时功能: 于微信和QQ的紧密联系,可以通过绑定QQ号,利用QQ空间的定时发布功能来间接实现微信朋友圈的定时发布。首先,在QQ空…...
如何利用phpstudy创建mysql数据库
phpStudy诞生于2007年,是一款老牌知名的PHP开发集成环境工具,产品历经多次迭代升级,目前有phpStudy经典版、phpStudy V8(2019版)等等,利用phpstudy可以快速搭建一个mysql环境,接下来我们就开始吧…...
五、Linux之Vi和Vim编辑器
基本介绍 Vi Linux 系统会内置 vi 文本编辑 Vim 具有程序编辑的能力,可以看做是 Vi 的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。 代码补完、编译及错误跳转等方便编程的功能特别丰富 常用的三种模式 正常模式 以 vim …...
git删除错误的commit
文章目录 1、git删除错误的commit2、.gitignore配置文件不生效的问题 1、git删除错误的commit git的流程如图: 当某次失误造成commit的版本有问题,需要回退到正常的版本修改后重新add。 首先通过git log查看commit提交记录,可以看到HEAD-…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
