我對ASN.1 SET
類型的限制感到困惑。一般來說,我意識到SET
類型基本上與SEQUENCE
相同,只是組件的順序無關緊要。ASN.1 SET類型限制
開創性的書ASN.1,"ASN.1 — Communication Between Heterogeneous Systems"由Olivier Dubuisson,有這樣說集:
如果序列類型的組件順序並不重要,該密鑰 - 詞集使用用於建模這樣的非有序結構:
Description ::= SET {
surname IA5String,
first-name IA5String,
age INTEGER }
在這種情況下,應用程序可以提供組件到 ENC或者按照最佳順序排列。
我立刻注意到這裏的是,在Dubuisson的例子中,SET
有它IA5String類型。這似乎矛盾的時候,我讀過here in this tutorial,其中明確表示,:
的類型和價值符號的設置類似於SEQUENCE, 除了類型的每個組件都必須是不同的所有 其他人和價值觀可以以任何順序。
那麼SET
如何合法有兩個IA5String
類型?我傾向於相信Olivier Dubuisson的一本隨機互聯網教程的書,但是,SET
類型可能有多個相同類型的組件,這沒有任何意義。原因在於,在ASN.1中,類型標識符沒有被編碼爲(至少對於諸如BER的大多數常見編碼),因此解碼器將無法知道IA5String
適用於哪個組件 - 它是surname
還是firstname
?沒有辦法知道排序是否無關緊要。
Olivier Dubuisson在這裏犯了一個大錯誤嗎? (他在SET
類型的漫長描述中也沒有提及任何關於SET
不能具有多於一種類型的事實的任何地方)。