我有以下要求。我有一个 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 是否有理由在编码为 DER 时包含“ Ber ConstructedOctetString”并标记为 0x04?我的两个要求不兼容吗?