解析 ASN1 数据
Parsing ASN1 data
我应该将 ASN1 编码字节数组解析为 Java 对象。我的公司给了我一份结构非常详细的文档。然而在他们解析数据的例子中(没有代码,只是从位到值的映射):
- 将最后 7 个字节从十六进制转换为二进制
- 根据这 7 个字节中的特定位赋值
没有考虑标签和长度。该示例还只是跳过了后续字节。我不确定如何使用 Bouncy Castle ASN1 库.
解析这样的数据
这是数据:
Example data
这是映射:
22 0....... some field = 0
.01000.. some field = 8
......1. some field = 1
.......0 some field = 0
ASN1 编码数据是否必须采用 Tag-Length-Value 格式,还是可以使用某种特定语法?
现在这是我的代码:
ASN1InputStream asn1InputStream = new ASN1InputStream(
new ByteArrayInputStream(
ByteArrayUtil.hexStringToByteArray(
"16" + "07" +
"22" + "00" + "00" + "19" + "BF" + "12" + "E0")));
ASN1Primitive deria5String;
while ((deria5String = asn1InputStream.readObject()) != null) {
//process
}
解析最后 7 个字节得到 DERIA5String 类型的对象。
编辑 1: 下面是我应该阅读 InputStream 的 ASN1 结构的定义:
这是我在文档中读取 InputStream 的示例:
Does the ASN1 encoded data have to be in Tag-Length-Value format or
can it be using some kind of specific grammar?
BER 和DER 编码数据使用TLV 格式。然而,这并不意味着您的应用程序没有赋予某些八位字节串、整数、字符串等特殊含义,ASN.1 中没有表示这些含义。如果我冒险猜测,因为“16 07”对应于标签 [UNIVERSAL 22] 和长度 7,其中该特定标签表示字符串,我猜他们正在从字符串中解析一些数据。
我应该将 ASN1 编码字节数组解析为 Java 对象。我的公司给了我一份结构非常详细的文档。然而在他们解析数据的例子中(没有代码,只是从位到值的映射):
- 将最后 7 个字节从十六进制转换为二进制
- 根据这 7 个字节中的特定位赋值
没有考虑标签和长度。该示例还只是跳过了后续字节。我不确定如何使用 Bouncy Castle ASN1 库.
解析这样的数据这是数据:
Example data
这是映射:
22 0....... some field = 0
.01000.. some field = 8
......1. some field = 1
.......0 some field = 0
ASN1 编码数据是否必须采用 Tag-Length-Value 格式,还是可以使用某种特定语法?
现在这是我的代码:
ASN1InputStream asn1InputStream = new ASN1InputStream(
new ByteArrayInputStream(
ByteArrayUtil.hexStringToByteArray(
"16" + "07" +
"22" + "00" + "00" + "19" + "BF" + "12" + "E0")));
ASN1Primitive deria5String;
while ((deria5String = asn1InputStream.readObject()) != null) {
//process
}
解析最后 7 个字节得到 DERIA5String 类型的对象。
编辑 1: 下面是我应该阅读 InputStream 的 ASN1 结构的定义:
这是我在文档中读取 InputStream 的示例:
Does the ASN1 encoded data have to be in Tag-Length-Value format or can it be using some kind of specific grammar?
BER 和DER 编码数据使用TLV 格式。然而,这并不意味着您的应用程序没有赋予某些八位字节串、整数、字符串等特殊含义,ASN.1 中没有表示这些含义。如果我冒险猜测,因为“16 07”对应于标签 [UNIVERSAL 22] 和长度 7,其中该特定标签表示字符串,我猜他们正在从字符串中解析一些数据。