我有一个从X500Name检索的java.security.util.DerValue
。
x500Name.findMostSpecificAttribute(SOME_OID)
一些值存储为DER编码。
.toString
给我一些东西lile:[DerValue, tag = 18, length = 12]
怎么解码呢?
另外,不可能从中获取bytes []。
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
}
最佳答案
这是Sun内部类,它称为sun.security.util.DerValue
,而不是java.security.util.DerValue
。 ASN.1类型由标签中的信息标识。因此,这取决于标签可以从DerValue
检索哪种数据。可以在in this book或标准8824-1 and 8825-1中找到更多信息。
但是,您不应该依赖Sun内部类。如果您可以在byte[]
中获得基础DER编码,则可以使用例如有弹性的城堡解析BER / DER。