.NET 的 System.DirectoryServices.Protocols 程序集指定了一个轻量级 ASN.1 BER 编码器,但文档不是很好:BerConverter
.
您可以通过指定格式字符串和要编码的对象列表来调用它。
INTEGER
s 可以用格式字符编码i
或e
OCTET STRING
s 可以用o
字符编码SEQUENCE
s 可以用{
和编码}
- 等等
我真的很想使用这个简单的转换器,所以我不必承担额外的依赖。接受依赖是不可取的,因为 C# 可以从 Powershell 调用,并且分发一个与 C# 做一些花哨的脚本是很好的,只要它不需要 .NET 不包含的程序集。
但是,BerConverter 似乎没有办法指定 Application 或 Context-Specific 标签,这些标签通常用于消除 ASN.1 中的歧义,例如当构造类型的组件被标记为OPTIONAL
因此,我可以对以下内容进行编码:
BerConverter.Encode("{i{i}}", 1, 2);
这使:
30 84 00 00 00 0c 02 01 01 30 84 00 00 00 03 02 01 02
但是,如果第二个序列需要[Application 1]
或者61
......我不确定在格式字符串中放入什么以在编码中发出它。
BerConverter 甚至有这个能力吗?