SM2无证书及隐式证书公钥机制签名和加密过程详解(三)

在对隐式证书ASN.1模板和生成过程进行说明后(SM2无证书及隐式证书公钥机制签名和加密过程详解(二)-CSDN博客),进一步介绍用于隐式证书编码的COER。

(3)COER编码
ASN.1模板可采用多种编码形式,如比较熟悉的BER、DER和PER等,隐式证书使用OER(Octet Encoding Rules)。OER标准存在两个不同版本,即Basic OER和Canonical OER(COER),其中COER特点是抽象值与编码内容之间一一对应。

以下使用几个ASN.1基本类型的实例来说明COER编码过程。

INTEGER类型

A ::= SEQUENCE {
    a1        INTEGER(0..100),
    a2        INTEGER(-290..390),
    a3        INTEGER(0..60000) OPTIONAL,
    a4        INTEGER(-5000000..5000000),
    a5        INTEGER(1000..MAX),
    a6        INTEGER(-1..MAX),
    a7        INTEGER    OPTIONAL
}

a A ::= {
    a1    4,
    a2    4,
    a3    4,
    a4    4,
    a5    1024,
    a6    4,
    a7    4
}

a的COER编码过程如下:
1)a是A类型的参数,是一个序列(SEQUENCE),不存在扩展标记(...),所以前导项中不存在扩展位。
2)a3和a4有 OPTIONAL标记,所以前导项中有位图(bitmap)。
3)a中a3和a4都被启用,所以对应bitmap置为1。
--0xC0, '1100 0000'
4)a1编码为0x04,a1的取值范围1个八位。
5)a2编码为0x0004,a2的取值范围2个八位。
6)a3编码为0x0004,a3的取值范围2个八位。
7)a4编码为0x00000004,a4的取值范围4个八位。
8)a5编码为0x020400,0x02是长度表示2个八位,0x0400是具体内容。
9)a6编码为0x0104,0x01是长度表示1个八位,0x04是具体内容(变长)。
10)a7编码为0x0104,0x01是长度表示1个八位,0x04是具体内容(变长)。
--0xC004000400040000000402040001040104

STRING类型

B ::= SEQUENCE {
    b1        IA5STRING(SIZE(0..10)),
    b2        IA5STRING(SIZE(3)),
    b3        IA5STRING,
    b4        OCTET STRING,
    b5        BIT STRING(SIZE(4)),
    b6        BIT    STRING
}

b B ::= {
    b1    "ABC",
    b2    "ABC",
    b3    "ABC",
    b4    '01020304'H,
    b5    '0101'B,
    b6    '0101'B
}

b的COER编码过程如下:
1)b是B类型的参数,是一个序列(SEQUENCE),不存在扩展标记(...),不存在 OPTIONAL或者 DEFAULT标记的选项,所以不需要对前导项进行编码。
2)b1编码为0x03414243,0x03是长度表示3个八位,0x414243是具体内容(变长)。
3)b2编码为0x414242,定长为3个八位。
4)b3编码为0x03414243,0x03是长度表示3个八位,0x414243是具体内容(变长)。
5)b4编码为0x0401020304,0x04是长度表示4个八位,0x01020304是具体内容(变长)。
6)b5编码为0x50,定长为1个八位,实际长度为4位,后四位并未使用。7)b6编码为0x020450,0x02是长度表示2个八位,0x0450是具体内容,0x04表示未使用的位数,0x50是具体内容(变长)。
--0x0341424341424203414243040102030450020450

其他类型

C ::= CHOICE {
    c1    BOOLEAN,
    c2    SEQUENCE OF ENUMERATED { a, b, c, d, e}
}

c C ::= c2 : {b, c, d, e}

c的CORE编码过程如下:c的CORE编码过程如下:
1)c是C类型的参数,是一个选择(CHOICE),tag标记类型编码为'10'B,成分编码为1。
--0x81('10000001'B)
--'00' universal,'01' application,'10' context-specific,'11' private
2)c2是 SEQUENCE OF类型的参数,编码为0x0104,长度为1个八位,循环次数为4次。
3)b的编码为0x01。
4)c的编码为0x02。
5)d的编码为0x03。
6)e的编码为0x04。
--0x81010401020304

接下来,将介绍具体隐式证书COER编码实例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1554984.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

冥想第一千三百零一天(1301)

1.今天上午溪溪和小侄子写作业,我带着桐桐去了惠济区的裕华广场永辉,给家人买了好吃的,下午4点半左右去了妈妈朋友家里摘石榴。 2.感谢父母,感谢朋友,感谢家人,感谢不断进步的自己。

[C++]使用纯opencv部署yolov11旋转框目标检测

【官方框架地址】 GitHub - ultralytics/ultralytics: Ultralytics YOLO11 🚀 【算法介绍】 YOLOv11是一种先进的对象检测算法,它通过单个神经网络实现了快速的物体检测。其中,旋转框检测是YOLOv11的一项重要特性,它可以有效地检…

利用 Python 爬虫采集 1688商品详情

1688是中国的一个大型B2B电子商务平台,主要用于批发和采购各种商品。对于需要从1688上获取商品详情数据、工程数据或店铺数据的用户来说,可以采用以下几种常见的方法: 官方API接口:如果1688提供了官方的API接口,那么可…

FinOps现状分析:行业趋势与未来展望

一、FinOps 的国内现状 《FinOps 现状》是 FinOps 基金会自 2020 年以来开展的一项年度调查,旨在收集对关键优先、行业趋势和 FinOps 实践方向 的见解。该调查有助于为 FinOps 基金会的活动提供信息,并为更广泛的市场提供有关 FinOps 在各种组织中如何实…

redhat7.7 linux 网络配置文件

一、为什么虚拟网卡配置文件是ens33 变更目录至网络脚本(network-scripts)文件夹,发现网络配置文件名称为“ifcfg-ens33” cd /etc/sysconfig/network-scripts ls扩展:“ifcfg-ens33”文件下面还有一个“ifcfg”前缀的文件&…

线程互斥函数的例子

代码 #include<stdio.h> #include<pthread.h> #include<sched.h> void *producter_f(void *arg); void *consumer_f(void *arg); int buffer_has_item0; pthread_mutex_t mutex; int running1; int main(void) {pthread_t consumer_t;pthread_t producter_t…

【ubuntu】APT、apt、apt-get介绍

目录 1.apt简介 2.常用apt指令 2.1安装 2.2更新列表 2.3更新已经安装的软件包 2.4搜索软件包 2.5显示软件包信息 2.6移除软件包 2.7清理无用的安装包 2.8清理无用的依赖项 3.apt和apt-get 3.1区别 3.2 总结 1.apt简介 apt的全称是advanced package …

大学生就业桥梁:基于Spring Boot的招聘系统

1系统概述 1.1 研究背景 如今互联网高速发展&#xff0c;网络遍布全球&#xff0c;通过互联网发布的消息能快而方便的传播到世界每个角落&#xff0c;并且互联网上能传播的信息也很广&#xff0c;比如文字、图片、声音、视频等。从而&#xff0c;这种种好处使得互联网成了信息传…

No.1 | 从小白到入门:我的渗透测试笔记

嘿&#xff0c;小伙伴们&#xff01;好久不见啊&#xff0c;是不是都以为我失踪了&#xff1f;&#x1f602; 其实呢&#xff0c;最近一直在埋头苦学&#xff0c;感觉自己就像是在技术的海洋里游泳&#xff0c;每天都在吸收新知识。现在终于有时间冒个泡&#xff0c;跟大家分享…

脱口秀演员调侃王楚钦引争议

听说脱口秀演员调侃王楚钦输球&#xff0c;野生喜剧回应暂停演出合作&#xff0c;这不仅引发了关于脱口秀表演冒犯边界的讨论&#xff0c;也让我们反思言论自由与尊重他人之间的界限。 脱口秀作为一种艺术形式&#xff0c;其核心在于通过幽默、讽刺的方式&#xff0c;对社会现象…

Meta MovieGen AI:颠覆性的文本生成视频技术详解

近年来&#xff0c;生成式AI技术的发展迅猛&#xff0c;尤其是在文本生成图像、文本生成视频等领域。Meta公司近期推出的MovieGen AI&#xff0c;以其强大的文本生成视频能力震撼了整个AI行业。本文将详细解读Meta MovieGen AI的核心技术、功能特性及其在实际应用中的潜力。 一…

Mac 安装OpenAI的开源语音神器Whisper

一.Whisper 项目地址 1.GitHub项目地址 https://github.com/openai/whisper二.Whisper项目简介 Whisper 是 OpenAI 开源的语音神器&#xff0c;可以实现识别音频、视频中的人声&#xff0c;并将人声转换为字幕内容&#xff0c;保存到文件&#xff1b; 三.Whisper 安装教程 …

一“填”到底:深入理解Flood Fill算法

✨✨✨学习的道路很枯燥&#xff0c;希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一 floodfill算法是什么&#xff1f; 二 相关OJ题练习 2.1 图像渲染 2.2 岛屿数量 2.3 岛屿的最大面积 2.4 被围绕的区域 2.5 太平洋大西洋水流问题 2.6 扫雷游戏 2.7 衣橱整…

Fastjson反序列化

Fastjson反序列化一共有三条利用链 TempLatesImpl&#xff1a;实战中不适用JdbcRowSetImpl&#xff1a;实际运用中较为广泛BasicDataSource&#xff08;BCEL&#xff09; 反序列化核心 反序列化是通过字符串或字节流&#xff0c;利用Java的反射机制重构一个对象。主要有两种…

C语言复习概要(二)

本文目录 C语言中的数组与函数详解1. 引言2. 数组2.1. 什么是数组&#xff1f;语法&#xff1a;示例&#xff1a; 2.2. 数组的初始化示例 1&#xff1a;在声明时初始化示例 2&#xff1a;部分初始化示例 3&#xff1a;运行时赋值 2.3. 数组的访问与修改示例&#xff1a; 2.4. 多…

vite学习教程02、vite+vue2配置环境变量

文章目录 前言1、安装依赖2、配置环境变量3、应用环境变量4、运行和构建项目资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝3W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容&#xff1…

vite学习教程04、vue集成axios封装request工具类及应用

文章目录 前言1、安装axios2、封装request工具类3、封装api请求工具4、实战&#xff1a;vue中使用api请求工具类资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝3W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技…

YOLO--前置基础词-学习总结

RFBNet是什么意思 RFBNet 是一种用于目标检测的深度学习网络&#xff0c;它的名字来源于 "Receptive Field Block Network"&#xff08;感受野块网络&#xff09;。简单来说&#xff0c;RFBNet 是一种可以让计算机更好地“看”图像中不同大小的物体的方法。 在图像处…

51单片机的家用煤气报警系统【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块温度传感器CO传感器蓝牙LED、蜂鸣器等模块构成。适用于家用天然气泄露报警器、煤气泄露报警器、无线报警等相似项目。 可实现功能: 1、LCD1602实时显示温度和煤气浓度 2、温度传感器DS18B20采集环境温度 3、CO传…

图解大模型计算加速系列:vLLM源码解析3,Prefix Caching

【全文目录如下】 一、两种不同的BlockAllocator 二、物理块和逻辑块的结构 三、prefill阶段的物理块分配方法 3.1 allocate函数入口 3.2 计算物理块hash值的方法 3.3 使用LRUEvictor管理物理块分配细节 3.4 再探LRUEvictor&#xff0c;理解“prefix” …