Java 解码X500Name中的DER编码值

Java 解码X500Name中的DER编码值,java,security,encryption,cryptography,x509certificate,Java,Security,Encryption,Cryptography,X509certificate,我有一个java.security.util.DerValue,我从X500Name检索到它 x500Name.findMostSpecificAttribute(SOME_OID) 某些值存储为DER编码.toString返回我一些lile: [DerValue, tag = 18, length = 12] 如何解码 此外,不可能从中获取字节[] derValue.getOctetString 还我 java.io.IOException: DerValue.getOctetStrin

我有一个
java.security.util.DerValue
,我从X500Name检索到它

x500Name.findMostSpecificAttribute(SOME_OID)
某些值存储为DER编码
.toString
返回我一些lile:

[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
}

这是一个Sun内部类,它被称为
Sun.security.util.DerValue
,而不是
java.security.util.DerValue
。ASN.1类型由标签中的信息标识。因此,它取决于标签,您可以从
DerValue
检索什么样的数据。更多信息可在标准中找到


但是,您不应该依赖Sun内部类。如果您可以在
字节[]
中获得基本的DER编码,那么您可以使用Bouncy Castle解析BER/DER。

这是一个Sun内部类,它被称为
Sun.security.util.DerValue
,而不是
java.security.util.DerValue
。ASN.1类型由标签中的信息标识。因此,它取决于标签,您可以从
DerValue
检索什么样的数据。更多信息可在标准中找到


但是,您不应该依赖Sun内部类。如果您可以在
字节[]
中获得基本的DER编码,那么您可以使用Bouncy Castle解析BER/DER。

这是一个Sun内部类,它被称为
Sun.security.util.DerValue
,而不是
java.security.util.DerValue
。ASN.1类型由标签中的信息标识。因此,它取决于标签,您可以从
DerValue
检索什么样的数据。更多信息可在标准中找到


但是,您不应该依赖Sun内部类。如果您可以在
字节[]
中获得基本的DER编码,那么您可以使用Bouncy Castle解析BER/DER。

这是一个Sun内部类,它被称为
Sun.security.util.DerValue
,而不是
java.security.util.DerValue
。ASN.1类型由标签中的信息标识。因此,它取决于标签,您可以从
DerValue
检索什么样的数据。更多信息可在标准中找到


但是,您不应该依赖Sun内部类。如果您可以在
字节[]
中获得基本的DER编码,则可以使用Bouncy Castle解析BER/DER。

该类提供了各种构造函数和方法

1) 尝试这个类的其他方法。那怎么办

toByteArray()
getDataBytes()
getAsString() // calls toPrintableString internally
??我不能肯定地说,我刚刚对字节码做了一个小检查


2) 如果显式调用构造函数,请尝试从提供给构造函数的参数中获取内容。

该类提供了各种构造函数和方法

1) 尝试这个类的其他方法。那怎么办

toByteArray()
getDataBytes()
getAsString() // calls toPrintableString internally
??我不能肯定地说,我刚刚对字节码做了一个小检查


2) 如果显式调用构造函数,请尝试从提供给构造函数的参数中获取内容。

该类提供了各种构造函数和方法

1) 尝试这个类的其他方法。那怎么办

toByteArray()
getDataBytes()
getAsString() // calls toPrintableString internally
??我不能肯定地说,我刚刚对字节码做了一个小检查


2) 如果显式调用构造函数,请尝试从提供给构造函数的参数中获取内容。

该类提供了各种构造函数和方法

1) 尝试这个类的其他方法。那怎么办

toByteArray()
getDataBytes()
getAsString() // calls toPrintableString internally
??我不能肯定地说,我刚刚对字节码做了一个小检查


2) 如果显式调用构造函数,请尝试从提供给构造函数的参数中获取内容。

derValue.getDataBytes
还返回字节数组
derValue.getDataBytes
还返回字节数组
derValue.getDataBytes
还返回字节数组well
derValue.getDataBytes也会返回字节数组,谢谢您的回复。试图找出如何用BC解码。谢谢你的回复。试图找出如何用BC解码。谢谢你的回复。试图找出如何用BC解码。谢谢你的回复。试图找出如何用BC对其进行解码。
toByteArray
&
getDataBytes
都返回字节[],但这些数组不同
getAsString
返回
null
@Artsiom:没有人请求这两个方法返回相同的值。可能一个返回DER编码的二进制值,而另一个只返回值(ASN 1类型、长度、值tripel)。也许你可以自己实例化一个已知的值。例如,类似“010101”(然而,DerValue类似乎总是在标记号上加上16,这表示ASN1序列,所以请自己计算出确切的值)。抱歉,目前我没有更多的时间进行调查,因为我正在与TLS进行斗争。
toByteArray
&
getDataBytes
都返回字节[],但这些数组不同
getAsString
返回
null
@Artsiom:没有人请求这两个方法返回相同的值。可能一个返回DER编码的二进制值,而另一个只返回值(ASN 1类型、长度、值tripel)。也许你可以自己实例化一个已知的值。例如,类似“010101”(然而,DerValue类似乎总是在标记号上加上16,这表示ASN1序列,所以请自己计算出确切的值)。抱歉,目前我没有更多的时间进行调查,因为我正在与TLS进行斗争。
toByteArray
&
getDataBytes
都返回字节[],但这些数组不同
getAsString
返回
null
@Artsiom:没有人请求这两个方法返回相同的值。可能一个返回DER编码的二进制值,而另一个只返回ASN的值