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...