簡體   English   中英

帶有可選字段的ASN.1編碼

[英]ASN.1 Encoding with Optional fields

假設在.asn文件中定義了以下對象。

TestObject := IMPLICIT [APPLICATION 7] SEQUENCE {
    version UTF8String, 
    a GeneralizedTime OPTIONAL,
    b [APPLICATION C0] IMPLICIT SEQUENCE OF [PRIVATE P0] IMPLICIT ad OPTIONAL,
    c [APPLICATION C1] IMPLICIT SEQUENCE OF ab OPTIONAL,
    d [APPLICATION C2] IMPLICIT ac OPTIONAL,
    e [APPLICATION C3] IMPLICIT ad OPTIONAL,
    f [APPLICATION C4] IMPLICIT al OPTIONAL,
    g [APPLICATION C6] IMPLICIT SEQUENCE OF an OPTIONAL,
    h ASNSyncPayload OPTIONAL,
    signature NULLOCTETSTRING, 
}

有多個可選字段,我不確定它們將如何編碼。

有人可以解釋一種可能使用libtasn1將以下內容編碼為二進制文件的方法嗎?

請注意,您的[APPLICATION C0]至[APPLICATION C6]標簽不是有效的ASN.1標簽。 [PRIVATE P0]也是如此。 刪除“ C”和“ P”,以便您具有[APPLICATION 0]至APPLICATION 6以及[PRIVATE 0],這樣您的標簽就可以了。 另外,ASN.1類型名稱必須以大寫字母開頭,因此“ ad”,“ ab”,“ ac”,“ al”和“ an”不是有效的類型名稱。

ASN.1有​​幾個編碼規則,它們以不同的方式處理可選字段。 BER,DER和CER使用ASN.1標簽在編碼中的存在或不存在來確定組件的存在或不存在。 這意味着,如果編碼具有版本字段的標簽,長度和值,然后是簽名字段的標簽長度​​和值,則所有中間的可選字段都不存在。

PER在每個序列的最前面使用位掩碼,並為每個可選字段使用一個位來指示其存在或不存在。

您可以在http://asn1-playground.oss.com上的帶有編碼器/解碼器的免費在線ASN.1編譯器中嘗試ASN.1示例,以詳細了解如何處理可選字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM