如何将字符串值转换为 ASN.1 值

How to convert string value to ASN.1 value

我正在尝试根据一些示例将某些值转换为 ASN.1 格式,但我未能成功理解示例 ASN.1 值的某些部分...

首先,我有以下 ASN.1 值:13024252
以字符串格式使用的值是:BR
十六进制的 BR 是 ASN.1 值的最后一部分:4252

1302 是什么?

第二个例子很相似:
ASN.1 值:130d31333335333233363030313839
以字符串格式使用的这个值是:1335323600189
十六进制的 1335323600189 是 ASN.1 值的最后一部分:31333335333233363030313839

130d 是多少?

我必须对字符串值进行编码,因为我必须为证书创建 subject_dn,而 subject_dn 的某些部分采用 ASN.1 格式。 使用 node-forge 我可以获得字符串格式的属性值,但无法将它们转换为 ASN.1 格式。

What's the 1302?

13(十六进制)是 ASN.1 类型 -- PrintableString

02(十六进制)是以字节为单位的类型内容长度。 2个字节。接下来的两个字节是类型值(在您的例子中是一个字符串)。与您的第二个示例相同。

ASN.1 类型使用 TLV(标签长度值)结构进行编码。您可以在这里阅读更多相关信息:DER Transfer Syntax.

请记住,专有名称是一个更复杂的结构,它是一个 SEQUENCE OF RelativeDistinguishedName,而后者又是一个 SET OF AttributeTypeAndValue:

DistinguishedName ::= RDNSequence

RDNSequence ::= SEQUENCE OF RelativeDistinguishedName

RelativeDistinguishedName ::= SET SIZE (1..MAX) OF
    AttributeTypeAndValue

AttributeTypeAndValue ::= SEQUENCE {
    type  AttributeType,
    value AttributeValue }

X.501 InformationalFramework

中的完整架构