我有一个java.security.util.DerValue
,我从X500Name中恢复。
x500Name.findMostSpecificAttribute(SOME_OID)
某些值存储为DER编码。 .toString
给我一些礼物:
[DerValue, tag = 18, length = 12]
如何解码?
此外,它无法从中获取字节[]。
derValue.getOctetString
给我回报
java.io.IOException: DerValue.getOctetString, not an Octet String: 18
编辑:
我的解决方案是:
def decodeDERValue(derValue: DerValue): String = {
val asnInput = new ASN1InputStream(new ByteArrayInputStream(derValue.toByteArray))
val obj = asnInput.readObject()
val derValueSting = obj match {
case p: DERPrintableString => p.getString
case p: DERUTF8String => p.getString
case p: DERIA5String => p.getString
case _ => ASN1Dump.dumpAsString(obj, true)
}
asnInput.close()
derValueSting.trim
}
答案 0 :(得分:2)
这是一个Sun内部类,它被称为sun.security.util.DerValue
,而不是java.security.util.DerValue
。 ASN.1类型由标记中的信息标识。因此,它取决于标记您可以从DerValue
检索哪种数据。可以在in this book或标准8824-1 and 8825-1中找到更多信息。
但是,您不应该依赖Sun内部课程。如果您可以在byte[]
中获取基础DER编码,则可以使用例如Bouncy Castle解析BER / DER。
答案 1 :(得分:1)
该类提供了各种构造函数和方法。
1)尝试此类的其他方法。
怎么样?toByteArray()
getDataBytes()
getAsString() // calls toPrintableString internally
?我不能肯定地只是对字节代码进行了一些调查。
2)如果显式调用构造函数,请尝试从提供给构造函数的参数中获取内容。