Как я декодирую DER закодированная строка в Java?

Я пытаюсь считать пользовательское расширение из цифрового сертификата. Я знаю, что значением является GeneralString, закодированный в DER. Существует ли простой способ правильно декодировать его и получить Строку Java? Я попробовал следующее, но' включает некоторые метаданные кодирования как символы спама в начале строки.

byte[] ext = cert.getExtensionValue("1.2.3.4");
String s= new String(ext);
System.out.println(s);

Существует ли быстрый и простой способ сделать это? Или я должен действительно пользоваться некоторой абсолютной библиотекой ASN.1?

Спасибо!

15
задан Ragesh 9 March 2010 в 14:18
поделиться

2 ответа

BouncyCastle (среди прочего):

Библиотека для чтения и записи закодированных объектов ASN.1.

6
ответ дан 1 December 2019 в 02:10
поделиться

Оказывается, с BouncyCastle это довольно просто:

private String getExtensionValue(X509Certificate X509Certificate, String oid) throws IOException
{
    String decoded = null;
    byte[] extensionValue = X509Certificate.getExtensionValue(oid);

    if (extensionValue != null)
    {
        DERObject derObject = toDERObject(extensionValue);
        if (derObject instanceof DEROctetString)
        {
            DEROctetString derOctetString = (DEROctetString) derObject;

            derObject = toDERObject(derOctetString.getOctets());
            if (derObject instanceof DERUTF8String)
            {
                DERUTF8String s = DERUTF8String.getInstance(derObject);
                decoded = s.getString();
            }

        }
    }
    return decoded;
}

private DERObject toDERObject(byte[] data) throws IOException
{
    ByteArrayInputStream inStream = new ByteArrayInputStream(data);
    ASN1InputStream asnInputStream = new ASN1InputStream(inStream);

    return asnInputStream.readObject();
}
8
ответ дан 1 December 2019 в 02:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: