DER编码基础

完成下面任务(9分)

  1. 对 BitString “101101101101”进行 DER编码,提交详细过程和结果。使用 echo 命令生成 bs.der文件,并使用 OpenSSL asn1parse命令解析,提交命令和结果(4 分)
    步骤1:分析BitString
    原始比特串:101101101101 (12位)
    步骤2:添加填充位
    BitString编码需要在数据前加1个字节表示未使用的位数
    12位数据需要4位填充才能凑整字节:1011011011010000
    未使用位数 = 4
    步骤3:转换为字节
    10110110 11010000 = 0xB6 0xD0
    步骤4:DER编码结构
BIT STRING tag: 0x03
Length: 3 bytes (1字节填充说明 + 2字节数据)
Value: 0x04 0xB6 0xD0

完整DER编码: 03 03 04 B6 D0
验证命令,生成bs.der文件并使用OpenSSL解析
image

  1. 对OID 1.2.156.10197.1.104.19 进行 DER 编码,提交详细过程和结果,并使用 OpenSSL asn1parse命令解析,提交命令和结果。(5分)
    编码过程:
    步骤1:分析OID
    OID: 1.2.156.10197.1.104.19
    步骤2:编码前两个数字
    第一个数字 = 1,第二个数字 = 2
    编码值 = 1 × 40 + 2 = 42 = 0x2A
    步骤3:编码后续数字
    156: 156 = 0x9C (10011100),最高位为1需要分字节
    156 = 10011100 = 0x9C (单字节即可,最高位为0)
    编码: 0x9C
    10197:
    10197 ÷ 128 = 79 余 85
    79 = 01001111 → 11001111 (最高位置1) = 0xCF
    85 = 01010101 → 01010101 (最高位置0) = 0x55
    编码: 0xCF 0x55
    1: 1 = 0x01
    104: 104 = 0x68 (01101000),最高位为0
    编码: 0x68
    19: 19 = 0x13 (00010011),最高位为0
    编码: 0x13
    步骤4:计算总长度和编码
    编码序列:2A 9C CF 55 01 68 13 (7字节)
    步骤5:DER编码结构
OID tag: 0x06
Length: 7 bytes
Value: 0x2A 0x9C 0xCF 0x55 0x01 0x68 0x13

完整DER编码: 06 07 2A 9C CF 55 01 68 13

验证命令:
生成oid.der文件并使用OpenSSL解析
image

与ai的对话
I

完成下面任务(9分)
1. 对 BitString “101101101101”进行 DER编码,提交详细过程和结果。使用 echo 命令生成 bs.der文件,并使用 OpenSSL asn1parse命令解析,提交命令和结果(4 分)
2. 对OID 1.2.156.10197.1.104.19 进行 DER 编码,提交详细过程和结果,并使用 OpenSSL asn1parse命令解析,提交命令和结果。(5分)

AI

我将逐步完成这两个DER编码任务。

## 1. BitString "101101101101"的DER编码

### 编码过程:

**步骤1:分析BitString**
原始比特串:`101101101101` (12位)

**步骤2:添加填充位**
- BitString编码需要在数据前加1个字节表示未使用的位数
- 12位数据需要4位填充才能凑整字节:`1011011011010000`
- 未使用位数 = 4

**步骤3:转换为字节**
- `10110110 11010000` = 0xB6 0xD0

**步骤4:DER编码结构**

BIT STRING tag: 0x03
Length: 3 bytes (1字节填充说明 + 2字节数据)
Value: 0x04 0xB6 0xD0


**完整DER编码:** `03 03 04 B6 D0`

### 验证命令:

**生成bs.der文件:**
```bash
echo -n -e '\x03\x03\x04\xB6\xD0' > bs.der

使用OpenSSL解析:

openssl asn1parse -inform DER -in bs.der

预期输出:

0:d=0  hl=2 l=   3 prim: BIT_STRING        

2. OID 1.2.156.10197.1.104.19的DER编码

编码过程:

步骤1:分析OID
OID: 1.2.156.10197.1.104.19

步骤2:编码前两个数字

  • 第一个数字 = 1,第二个数字 = 2
  • 编码值 = 1 × 40 + 2 = 42 = 0x2A

步骤3:编码后续数字

  • 156: 156 = 0x9C (10011100),最高位为1需要分字节

    • 156 = 10011100 = 0x9C (单字节即可,最高位为0)
    • 编码: 0x9C
  • 10197:

    • 10197 ÷ 128 = 79 余 85
    • 79 = 01001111 → 11001111 (最高位置1) = 0xCF
    • 85 = 01010101 → 01010101 (最高位置0) = 0x55
    • 编码: 0xCF 0x55
  • 1: 1 = 0x01

  • 104: 104 = 0x68 (01101000),最高位为0

    • 编码: 0x68
  • 19: 19 = 0x13 (00010011),最高位为0

    • 编码: 0x13

步骤4:计算总长度和编码
编码序列:2A 9C CF 55 01 68 13 (7字节)

步骤5:DER编码结构

OID tag: 0x06
Length: 7 bytes
Value: 0x2A 0x9C 0xCF 0x55 0x01 0x68 0x13

完整DER编码: 06 07 2A 9C CF 55 01 68 13

验证命令:

生成oid.der文件:

echo -n -e '\x06\x07\x2A\x9C\xCF\x55\x01\x68\x13' > oid.der

使用OpenSSL解析:

openssl asn1parse -inform DER -in oid.der

预期输出:

0:d=0  hl=2 l=   7 prim: OBJECT            :1.2.156.10197.1.104.19

完整验证过程截图示例:

# 创建BitString文件并解析
echo -n -e '\x03\x03\x04\xB6\xD0' > bs.der
openssl asn1parse -inform DER -in bs.der

# 创建OID文件并解析  
echo -n -e '\x06\x07\x2A\x9C\xCF\x55\x01\x68\x13' > oid.der
openssl asn1parse -inform DER -in oid.der

# 使用hexdump查看原始内容
hexdump -C bs.der
hexdump -C oid.der

总结:

  • BitString编码正确反映了原始比特串101101101101加上4位填充
  • OID编码正确表示了标识符1.2.156.10197.1.104.19
  • OpenSSL解析验证了编码的正确性
posted @ 2025-11-06 14:57  20231422徐清恬  阅读(14)  评论(0)    收藏  举报