ASN1抽象語法符號介紹

2021-04-18 09:50:32 字數 2295 閱讀 8563

asn1(abstract syntax notation one)

簡介

asn1(abstract syntax notation one),

抽象語法符號)是用來描述資料結構及其編碼的規則集,它廣泛用於rfc(request for comments)文字中的資料結構的描述。x.509證書結構(rfc 2459)就是採用asn1描述和編碼的。因此首先對asn1的編碼規則做一簡介。

在asn1編碼中,資料型別包括簡單型別和結構型別。簡單型別是不能再分解型別,如整型(interger)、位元串(bit string)、位元組串(octet string)、物件標示符(object identifier)、日期型(utctime)等。結構型別是由簡單型別和結構型別組合而成的,如順序型別(sequence, sequence of)、選擇型別(choice)、集合型別(set)等。順序型別的值由按給定順序成員資料值組成;選擇型別的值由多個成員資料型別中的某乙個值構成;集合資料型別由成員資料型別的乙個或多個值構成。每一種型別都有乙個整數標記(tag)來標識該型別。常用型別的tag值如下:

table 1.1: tags of class universal

標記(tag)  對應型別

[universal 1] boolean

[universal 2] integer

[universal 3] bit string

[universal 4] octet string

[universal 5] null

[universal 6] object identifier

[universal 8] external, instance of

[universal 12] utf8string

[universal 13] relative-oid

[universal 16] sequence, sequence of

[universal 17] set, set of

[universal 18] numericstring

[universal 19] printablestring

[universal 20] teletexstring, t61string

[universal 21] videotexstring

[universal 22] ia5string

[universal 23] utctime

[universal 24] generalizedtime

[universal 25] graphicstring

[universal 26] visiblestring, iso646string

[universal 27] generalstring

[universal 28] universalstring

[universal 29] character string

[universal 30] bmpstring

[universal 31]... reserved for future use

不論是簡單型別還是結構型別的值其編碼都是由四個部分構成:型別標識字段,用來標識該值的型別;長度字段,用來標識該值所佔的位元組數;值欄位;結束標示字段。

在型別標識欄位中,使用型別的

tag來標識該型別,在證書中使用乙個位元組來表示。

bit8-bit7

用來標示

tag

型別,bit6

標示是否為結構型別(

1 位結構型別),

bit5-bit1

是型別的

tag值。如

sequence

型別,其

tag型別位

universal(00),

屬於結構型別(1),

tag值為16(

10000

)所以其型別標示字段值為(

00110000

),即為

0x30

。長度字段,有兩種編碼格式。若長度值小於等於

127,則用乙個位元組表示,

bit8 = 0, bit7-bit1

存放長度值;若長度值大於

127,則用多個位元組表示,第乙個位元組存放長度欄位所佔的位元組數(

<=127),

並且bit8 = 1,

其餘位元組存放長度值。如果長度值不定用乙個位元組(

0x80

)表示。

值欄位,存放資料值,具體編碼隨值的資料型別不同而不同。

結束標示字段,兩個位元組(

0x0000),

只有在長度值為不定時才會出現。

asn1學習筆記 約束

繼續看asn1語法詳解,今天主要看了約束部分,包含 1.單值約束,包含列舉型別 enumerated 如 two integer 2 day enumerated wendnesday day wednesday after ia5string aaaaaa 2.型別包含約束 frenchweeke...

使用ASN 1協議編碼

在不同裝置節點進行通訊的時候,通常要定義乙個資料協議,用來定義要傳輸資料的資訊結構。而asn.1就是定義資料協議的一種方法。即寫乙個檔案,字尾名為 asn 例如 寫乙個檔案,檔案名叫 data.asn 檔案內容為 people sequence 即定義乙個資料結構people,包含兩個成員,乙個為位...

asn1學習筆記 約束

繼續看asn1語法詳解,今天主要看了約束部分,包含 1.單值約束,包含列舉型別 enumerated 如 two integer 2 day enumerated monday 0 tuesday 1 wednesday 2 thursday 3 friday 4 saturday 5 sunday...