【问题标题】:ASN1. Sequence vs SetASN1。序列与集合
【发布时间】:2015-10-05 04:17:03
【问题描述】:

我正在实现一个 ASN1 解析器来解码 x509 证书。您可以使用序列和设置标签。我看不出为什么这两个不应该是同一件事的原因。

各有什么区别,合适的使用时间?

【问题讨论】:

    标签: certificate rsa x509 asn.1


    【解决方案1】:

    一个序列是有序的,一个集合不是。

    什么时候合适?一个例子可能是在对大量数据进行编码时,将它们以正确的顺序带到发送方会比强制它们以任何顺序被接受需要更多的工作。

    【讨论】:

      【解决方案2】:

      作为@ChristophSommer 回答的附录

      一个序列是有序的,一个集合不是。

      ... 这会有所不同,例如编码某些对象时。使用 DER(区分编码规则)需要集合元素的区分顺序,而序列元素保持其原始顺序。

      适当的使用时间

      正如 Christoph 的回答所表明的那样,您对与序列中出现的顺序相关的条目使用序列,并为与顺序无关的条目使用集合。

      此外,通常假定集合中的条目是唯一的,一个集合中没有两个相同的条目,而一个序列可能包含许多相同的条目。

      【讨论】:

      • "通常假定是唯一的" -- DER 中是否允许重复的集合条目允许?如何定义构造类型的唯一性?
      • @JamesTheAwesomeDude "在 DER 中是否允许重复集条目? - 这是个好问题。最初我会说“不”,但查看 ITU-T Rec. X.680 和 ITU-T 建议书。 X.690 我只看到“零、一个或多个组件类型值的无序列表”的集合公式;这将允许重复...我很惊讶。
      • 您(正确地)提到了 DER,明确地指定了 distinguished order of set elements -- 如何 它们是如何排序的/这个排序是什么?这可能是一个线索或线索,可以有效地推动,因为任何明确的排序顺序都会有围绕相同项目的极端情况,即使没有在规范中讨论,至少会产生有趣的结果来检查实现由于计算机代码的不屈不挠的性质。
      • “一组值的组件值的编码应按升序显示,编码作为八位字节字符串进行比较,较短的组件在其尾端用 0 字节填充。” - 我错过了订单定义中的“严格”;要求严格升序将禁止重复...
      • 一个软件实现我尝试了一组整数的重复元素,但不是一组整数的序列。 (不过,我怀疑这个实现是粗制滥造的。)当然,a a ba a b 之间没有区别,所以排序确实会自行排序......但我想一个人真的“应该”留意为此,除非经过测试,否则在编码期间不要依赖库的重复数据删除功能。
      猜你喜欢
      • 1970-01-01
      • 2011-01-19
      • 1970-01-01
      • 1970-01-01
      • 2012-08-12
      • 1970-01-01
      • 1970-01-01
      • 2010-12-16
      • 2023-03-03
      相关资源
      最近更新 更多