【发布时间】:2011-08-03 18:16:40
【问题描述】:
我有以下要求。我有一个 asn1 类型,需要封装在构造的八位字节字符串中(八位字节字符串标记为 0x24)。然后在 CMS 签名块中对该结构进行签名,并且需要对整个 CMS 块进行 DER 编码。
我的问题是每次我对 CMS 块进行 DER 编码时,构造的八位字节字符串都会变成(非构造的?)八位字节字符串。我的意思是它的标签从 0x24(我需要的)切换到 0x04。
这是一个 Bouncycastle 错误还是我在做我不应该做的事情?忽略 CMS 块,似乎无论何时我尝试对“BerConstructedOctetString”进行 der 编码,它都不再是构造的八位字节串:
BERConstructedOctetString constructed = new BERConstructedOctetString(new DERInteger(3));
ASN1Object nonConstructed= new DEROctetString(new DERInteger(3));
System.out.println(Util.toHex(constructed.getDEREncoded()));
System.out.println(Util.toHex(nonConstructed.getDEREncoded()));
System.out.println(Util.toHex(constructed.getEncoded()));
System.out.println(Util.toHex(nonConstructed.getEncoded()));
输出如下:
04:03:02:01:03
04:03:02:01:03
24:80:04:03:02:01:03:00:00
04:03:02:01:03
编辑:这甚至可能吗? bouncycastle 和 not-yet-commons-ssl 是否都包含“BerConstructedOctetString”,在编码为 DER 时编码和标记为 0x04?我的两个要求不兼容吗?
【问题讨论】:
-
你能提供一个参考,说明为什么你认为八位字节字符串应该有标签 0x24 而不是 0x04?
标签: java bouncycastle asn.1