共用方式為


建構的類型

建構的 抽象語法標記法一 (ASN.1) 類型是由基本類型、字串類型或其他建構型別所組成。 例如,X.509 憑證延伸模組是由三種基本 ASN.1 類型所組成,如下列範例所示。

Extension ::= SEQUENCE 
{
   extnId              OBJECT IDENTIFIER,
   critical            BOOLEAN DEFAULT FALSE,
   extnValue           OCTET STRING
}

延伸模組包含 物件識別碼 (OID) 、布林值,可識別延伸模組是否重要,以及包含值的位元組陣列。 憑證註冊 API 支援下列建構的 ASN.1 類型。

SEQUENCE 和 SEQUENCE OF

編碼標籤:0x30

包含一或多個類型的已排序欄位系列。 欄位可以標示為 OPTIONALDEFAULT。 此外,若要避免解碼時模棱兩可,後續選擇性欄位應該使用唯一識別碼 (括弧整數,例如 [1]) ,以及下列必要欄位,如下列範例所示。

SomeValue ::= SEQUENCE 
{
   a     INTEGER,
   b     [0] INTEGER OPTIONAL,
   c     [1] INTEGER DEFAULT 1,
   d     INTEGER
}

SEQUENCESEQUENCE OF之間的差異在於SEQUENCE OF建構的元素必須屬於相同的類型。 請參閱下列範例。 這兩個建構在編碼時都會有相同的標記值 (0x30) 。

PolicyQualifiers ::=  SEQUENCE OF PolicyQualifierInfo

PolicyQualifierInfo ::= SEQUENCE 
{
   policyQualifierId   OBJECT IDENTIFIER,
   qualifier           ANY OPTIONAL
}

另一個查看 SEQUENCESEQUENCE OF 差異的方法,是將它們與 C 程式設計語言中的對應專案進行比較。 也就是說, SEQUENCE 大致相當於 結構, 而 SEQUENCE OF 大致相當於陣列。

SET 和 SET OF

編碼標籤:0x31

包含一或多個類型的未排序欄位系列。 這與包含已排序清單的 SEQUENCE 不同。 指定未排序的清單可讓應用程式以最適當的順序將結構欄位提供給編碼器。 如同 SEQUENCESET 建構的欄位可以標示為 OPTIONALDEFAULT,而且必須使用唯一識別碼來厘清解碼程式。 SETSET OF之間的差異在於SET OF建構的專案必須屬於相同的類型。

Name ::= SEQUENCE OF RelativeDistinguishedName

RelativeDistinguishedName ::= SET OF AttributeTypeValue

AttributeTypeValue ::= SEQUENCE 
{
   type       OBJECT IDENTIFIER,
   value      ANY 
}

選擇

編碼標記:不適用

定義替代專案之間的選擇。 每個替代專案都必須以括弧整數唯一識別,以避免解碼時模棱兩可。 編碼時, CHOICE 建構會有所選替代專案的編碼標記值。

AltNames ::= SEQUENCE OF GeneralName

GeneralNames ::= AltNames

GeneralName ::= CHOICE 
{
   otherName               [0] IMPLICIT OtherName,
   rfc822Name              [1] IMPLICIT IA5String,
   dNSName                 [2] IMPLICIT IA5String,
   x400Address             [3] IMPLICIT SeqOfAny,
   directoryName           [4] EXPLICIT Name,
   ediPartyName            [5] IMPLICIT SEQUENCE OF ANY,
   uniformResourceLocator  [6] IMPLICIT IA5String,
   iPAddress               [7] IMPLICIT OCTET STRING,
   registeredID            [8] IMPLICIT OBJECT IDENTIFIER
}

ASN.1 類型系統

ASN.1 類型的 DER 編碼

可辨別編碼規則