解码DerOctetStrings以提取字节(BouncyCastle,C#)

时间:2014-04-14 23:31:17

标签: c# encoding bouncycastle decoding

我知道这不会像我一样努力。我已经构建了一个结构来将事物编码成Asn1(使用BouncyCastle,C#),没问题。

尝试提取一个整数很容易(BouncyCastle:(DerInteger)object.Value.IntValue),但DerOctetStrings似乎没有直接的功能 - 可能因为它可以表示ascii字符串AND byte [] 。

所以{04 02 46 45}代表字节[] {0x46,0x45}和字符串" FE"

...而且我无法弄清楚如何获得,不用手动剥离标签并使用长度来获取后面的字节。所有BouncyCastle方法似乎都会拍摄掉所有八位字节(04 02 46 45)或再次编码(04 06 04 02 46 45)

我真的很想坚持BouncyCastle只是为了让它与我编写的编码器保持平行,并且因为它内置了对正确投射的长度字段的检查。如果我必须走那条路,.NET就更好了。更糟糕的是,我会手动完成所有操作,但这很丑陋。

主要问题:如何使用内置功能从DerOctetString中提取内容字节(没有标记和长度)? 次要问题:将这些输出字节转换为普通C#字符串的最简单方法是什么?

- 旁白:我在这里找到了两个类似的帖子: How do I decode a DER encoded string in Java? 哪个直接进入字符串版本,不能只抓取字节

BouncyCastle Java - Decoding DER encoded OCTET strings 但这只涉及一个java库,所以它不能帮助我

=============================================== ========= 编辑:解决了问题的主要部分。这是.GetOctets(所以接受这个答案),潜在的问题只是来自BouncyCastle的一个不清楚的构造函数。

因此,如果有人想将Asn.1送入BouncyCastle,请不要使用:

DerOctetString(byte[] asn1ByteArray);

使用继承的

Asn1Object.FromByteArray(byte[] asn1ByteArray);

如果我找出字符串位,我将再次使用该解决方案编辑,但现在我只处理更清晰的UTF8字符串

1 个答案:

答案 0 :(得分:1)

我只是使用java版本,因此我不确定这是否对c#有帮助,但您是否尝试使用getOctets()获取DEROctetString的内容?

它完全符合您的要求。