CRLDistributionPoints.ReasonFlags 的 ASN.1 位串编码
ASN.1 BitString encoding for CRLDistributionPoints.ReasonFlags
@Crypt32 说:for keyCompromise and caCompromise reasons, it should be 81 02 05 60
——(在问题 后发表评论)。
05 60 is: 00000101 01100000
ReasonFlags ::= BIT STRING {
unused (0),
keyCompromise (1),
cACompromise (2),
affiliationChanged (3),
superseded (4),
cessationOfOperation (5),
certificateHold (6),
privilegeWithdrawn (7),
aACompromise (8) }
为什么keyCompromise+cACompromise被编码成05 60?谢谢。
更新:在Windows中,05 60被解码为cessationOfOperation (5)
05
是未使用的位数。它是 BIT_STRING 的一部分。 60
(所有八位字节都以十六进制表示)是位串值。 BIT_STRING 是一长串位。比特在 LTR 方向上被索引。最小传输单位是字节,所以每个位串的长度都是8位的倍数。如果将实际位串的长度除以8取余,则余数表示未使用的位。未使用的位是最后一个 1
之后直到字节末尾的零位的数量。如果右侧的所有 8 位都未使用,则不对零字节进行编码。
位索引将 1:1 映射到 ASN.1 模块中括号中的位数。 ASN.1 模块定义了需要 2 个字节编码的 9 位:
由于第二个字节中的所有位均为零,因此该字节未编码:
您看到位 (1) 和 (2) 设置为 1
,这映射到启用的 keyCompromise
和 cACompromise
标志的按位或组合。其余位在字节结束之前为零,因此不使用。如果我们计算它们,我们得到 5 个未使用的位,编码值将如下所示:
03 02 05 60
其中:
- 03 -- 标签标识符
- 02 -- 标签长度
- 05 -- 未使用的位增加
- 60 -- 编码值
如果包含 aACompromise
位会怎样?该位需要第二个字节:
所有其余位(第 9 位之后)均为零,因此它们未被使用(恰好 7 位)。所以这个设置的编码是:
03 03 07 60 80
其中:
- 03 -- 标签标识符
- 03 -- 标签长度
- 07 -- 未使用的位计数
- 60 80 -- 编码值
IDK 如果我解释得足够好,我已经尽力了。
@Crypt32 说:for keyCompromise and caCompromise reasons, it should be 81 02 05 60
——(在问题
05 60 is: 00000101 01100000
ReasonFlags ::= BIT STRING {
unused (0),
keyCompromise (1),
cACompromise (2),
affiliationChanged (3),
superseded (4),
cessationOfOperation (5),
certificateHold (6),
privilegeWithdrawn (7),
aACompromise (8) }
为什么keyCompromise+cACompromise被编码成05 60?谢谢。
更新:在Windows中,05 60被解码为cessationOfOperation (5)
05
是未使用的位数。它是 BIT_STRING 的一部分。 60
(所有八位字节都以十六进制表示)是位串值。 BIT_STRING 是一长串位。比特在 LTR 方向上被索引。最小传输单位是字节,所以每个位串的长度都是8位的倍数。如果将实际位串的长度除以8取余,则余数表示未使用的位。未使用的位是最后一个 1
之后直到字节末尾的零位的数量。如果右侧的所有 8 位都未使用,则不对零字节进行编码。
位索引将 1:1 映射到 ASN.1 模块中括号中的位数。 ASN.1 模块定义了需要 2 个字节编码的 9 位:
由于第二个字节中的所有位均为零,因此该字节未编码:
您看到位 (1) 和 (2) 设置为 1
,这映射到启用的 keyCompromise
和 cACompromise
标志的按位或组合。其余位在字节结束之前为零,因此不使用。如果我们计算它们,我们得到 5 个未使用的位,编码值将如下所示:
03 02 05 60
其中:
- 03 -- 标签标识符
- 02 -- 标签长度
- 05 -- 未使用的位增加
- 60 -- 编码值
如果包含 aACompromise
位会怎样?该位需要第二个字节:
所有其余位(第 9 位之后)均为零,因此它们未被使用(恰好 7 位)。所以这个设置的编码是:
03 03 07 60 80
其中:
- 03 -- 标签标识符
- 03 -- 标签长度
- 07 -- 未使用的位计数
- 60 80 -- 编码值
IDK 如果我解释得足够好,我已经尽力了。