DER编码基础

完成下面任务(9分)

1. 对 BitString "101101101101"进行 DER编码,提交详细过程和结果。使用 echo 命令生成 bs.der文件,并使用 OpenSSL asn1parse命令解析,提交命令和结果(4 分)

补位:由于BitString的长度不是8的倍数,我们需要在末尾添加比特0,直到长度是8的倍数。"101101101101"长度为12位,所以我们需要添加4个0,使其成为16位:"1011 0110 1101 0000"。

确定未使用的比特数:在最后一个字节中,未使用的比特数为4(因为我们添加了4个0以达到16位)。

构建DER编码:

首先,BitString的标识符为0x03(BIT STRING类型)。

接着,我们需要确定编码的总长度。由于我们有16位,需要2个字节来表示,再加上1个字节来表示未使用的比特数,总共需要3个字节。

因此,长度字段为0x03(3的DER编码)。 然后,我们需要添加一个字节来表示未使用的比特数,这里是0x04(因为使用了4个0)。

最后,我们将BitString的二进制数据转换为字节表示。"10110110 11010000"转换为字节是0xB6和0xd0(因为最后4位是0)。

将这些组合起来,DER编码为:0x03 0x02 0x04 0xB6 0xd0。

即03 02 04 b6 d0

命令生成bs.der文件

bash 复制代码
echo -n -e "\x03\x02\x04\xb6\xd0" > bs.der

使用openssl asn1parse解析

bash 复制代码
openssl asn1parse -in bs.der
bash 复制代码
[wzy@LAPTOP-PRC71A0C test2]$ echo -n -e "\x03\x02\x04\xb6\x00" > bs.der
[wzy@LAPTOP-PRC71A0C test2]$ ls
base  base.c  bs.der  readsnbase64.c  sn.txt
[wzy@LAPTOP-PRC71A0C test2]$ openssl asn1parse -in bs.der
 0:d=0  hl=1 l=   2 prim: BIT STRING

2. 对 基于SM2算法和SHA256算法的签名的OID 1.2.156.197.1.503进行 DER 编码,提交详细过程和结果,并使用 OpenSSL asn1parse命令解析,提交命令和结果。(5分)

OID(Object Identifier)是一种用于标识对象的标准化方法。OID 1.2.156.197.1.503可以分解为以下几个部分:

1.2: ISO 和 identified-organization 156: CN (China) 197: organization (SM2) 1: sub-organization 503: specific algorithm (SM2 with SHA256)

06 表示OID类型 05 表示OID的长度为5字节

OID 1.2.156.197.1.503的DER编码过程如下:

1.第一个字节:0x06(表示OID类型)

2.长度字节:0x05(表示OID值的长度为5字节)

3.OID值:

1.2 编码为 0x2A

156 编码为 0x9F 0x3C

197 编码为 0xC5

1 编码为 0x01

503 编码为 0xF7

最终的DER编码为:06 05 2A 9F 3C C5 01 F7

2A 9F 3C C5 01 F7 是OID 1.2.156.197.1.503的DER编码值

bash 复制代码
[wzy@LAPTOP-PRC71A0C test2]$ echo -n "06052A9F3CC501F7" | xxd -r -p | openssl asn1parse -inform DER 
    0:d=0  hl=2 l=   5 cons: SEQUENCE           
    2:d=1  hl=2 l=   3 prim: OBJECT            :1.2.156.197.1.503 

提交要求 (1')

  1. 记录实践过程和 AI 问答过程,尽量不要截图,给出文本内容
  2. (选做)推荐所有作业托管到 gitee或 github 上
  3. (必做)提交作业 markdown文档,命名为"学号-姓名-作业题目.md"
  4. (必做)提交作业 markdown文档转成的 PDF 文件,命名为"学号-姓名-作业题目.pdf"
相关推荐
aramae6 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
无敌贵点大王7 小时前
RTThread学习记录11——RT-Thread 设备模型吃透:UART/ADC/PWM/PIN 到底有什么区别?
c语言·stm32·学习·链表
Logic1018 小时前
C语言/数据结构位运算题解:异或XOR找出时尚聚会中的“独特颜色“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
赛博仓鼠10 小时前
秋叶ComfyUI 3.2整合包实测:Python 3.13+Torch 2.13全栈升级,一键跑通MiniMax H3(附完整部署)
ai·ai作画·aigc·音视频
todoitbo10 小时前
本地图库语义搜索实战:接上蓝耘元生代,让“傍晚的海边“能搜到图
人工智能·ai·api·工具实战
Escalating_xu12 小时前
【C 语言项目】数组和函数综合实践:从零实现控制台扫雷游戏
c语言
天远API13 小时前
零信任架构实战:基于天远车信盟出险构建自动化车险评估网关
人工智能·ai·工具分享
JavaPub-rodert13 小时前
Codex 里的 GPT-6 Astra、GPT-5.6 Sol、Terra、Luna 怎么选?
ai·codex·skill
梅梅绵绵冰13 小时前
大模型应用开发-SpringAI框架
spring·ai
蜡台15 小时前
向量数据库完全解析:原理、核心指标、RAG工作流 \+ Milvus实战Demo
ai·agent