如何将特定 "key" 添加到 BouncyCastle 中的 ASN1EncodableVector?

How to add specific "key" to an ASN1EncodableVector in BouncyCastle?

所以,我问了一个类似的问题 ,但问题已经发生了变化。所以,我会给你一个完整的概述,然后我会问这个问题。

目前,我正在读取 .yml 文件并对其进行解析。然后我将数据存储在 HashMap 中,看起来像这样:

[{p_table=[p_event/Name, p_fault/Name]}, 
{s_table=[s_event/Name, s_fault/Name]}, 
{r_table=[r_event/Name, r_fault/Name]}]

现在,我明白如果我想用 bouncycastle 创建一个扩展,我首先必须将我的所有数据添加到 ASN1EncodableVector 中。我正在做的是使用证书来告诉我的 IoT 事物它们可以 subscribe/publish/receive 来自哪些主题。因此,我可以这样做:

while(iterator.hasNext()) {
            Entry<String, ArrayList<String>> entry = iterator.next();
            ASN1EncodableVector vector = new ASN1EncodableVector

            for(String val : entry.getValue()) {                
                (vector).add(new DERUTF8String(val));
            }
            allowedTables.add(new DERSequence(vector));
        }

这只会添加数组列表中的值,例如 p_event/Name 或 p_fault/Name,有没有办法让我指定这两个 DERUTF8String(s) 属于 p_table ?或者在使用 .add 方法时是否可以使用某种标识符?

那么代码是否可以像这样更改:

(vector).add(new DERUTF8String(val));

至:

(vector).add(new aConstructorToIdentifyWhatTheUTF8BelongsTo(entry.getKey()), new DERUTF8String(val));

您可以嵌套序列,即您可以为每个条目构建一个 DERSequence,然后将它们中的每一个添加到外部 ASN1EncodableVector 并从中生成最终序列。如果值的数量固定为 2,则内部序列可以包含 key/val/val,如您的示例所示。或者你可以有另一个序列来保存值,例如:

SEQUENCE {
  SEQUENCE {
    "p_table",
    SEQUENCE {
      "p_event/Name",
      "p_fault/Name",
    }
  },
  SEQUENCE {
    "s_table",
    SEQUENCE {
      "s_event/Name",
      "s_fault/Name",
      "s_other/Name",
    }
  },
  // and so on
}