gpt4 book ai didi

c# - C# 中的 ASN.1 编码 BER、PER 等

转载 作者:太空宇宙 更新时间:2023-11-03 15:44:26 26 4
gpt4 key购买 nike

我一直在搜索这个主题一段时间,但没有找到任何相关答案。所以想把它放在“Stackoverflow”上......

我们正在尝试对字符串进行编码以便通过 TCP/IP 连接传递它。由于 ASN.1 是最流行的一种,所以我们正在尝试各种规则 BER、DER、PER 等,以找出我们可以使用哪一种。我们的应用程序是一个基于 .net 的应用程序,我正在寻找可以执行此操作的免费库。

奇怪的是我找不到任何免费的库。所以,我开始寻找 .Net 框架本身。我发现只有一个“BERConverter”。所以,我用它做了一个小例子。以字符串为例

string str = "The BER format specifies a self-describing and self-delimiting format for encoding ASN.1 data structures. Each data element is encoded as a type identifier, a length description, the actual data elements, and, where necessary, an end-of-content marker. These types of encodings are commonly called type-length-value or TLV encodings. This format allows a receiver to decode the ASN.1 information from an incomplete stream, without requiring any pre-knowledge of the size, content, or semantic meaning of the data" 

在 UTF-8 或 ASCII 中,它显示为 512 字节。我使用以下代码使用 BER 对其进行编码

public static byte[] BerConvert(byte[] inputbytes)
{
byte[] output = BerConverter.Encode("{o}", inputbytes);
return output;
}

我得到一个大小为 522 的字节数组。在其他一些情况下,我发现与原始文本相比字节大小增加了。我认为编码会减小尺寸。为什么会这样?

除了 BER 之外,是否还有其他编码规则(如 PER 或 DER)可用于减少编码大小?是否有任何示例、库或支持有助于实现这些编码样式?

最佳答案

寻找 ASN.1 工具(免费和商业)时,一个好的起点是 ITU-T 网页 http://www.itu.int/en/ITU-T/asn1/Pages/Tools.aspx那列出了几个。那里列出了支持 C# 的商业工具,但我没有看到免费的 C# 工具。

至于减少编码大小,这在很大程度上取决于您的 ASN.1 规范的性质和使用的编码规则。如果您主要发送文本字符串,BER 和 DER 不会导致消息大小的减少,而 PER 可以显着减少消息的大小,如果您能够生成一个“允许的字母表”约束来指示较小的集合您发送的文本中允许的字符数。

您可以在免费的在线 ASN.1 编码器解码器上尝试各种编码规则和不同的约束,以查看更改的效果 http://asn1-playground.oss.com .

关于c# - C# 中的 ASN.1 编码 BER、PER 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28823094/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com