2012-09-25 25 views
9

Necesito obtener algunos datos del certificado X509.Número de serie X509 usando java

Si abro un archivo de certificado en Windows, muestra su número de serie en este formato.

ex. 39 65 70 eb d8 9f 28 20 4e c2 a0 6b 98 48 31 0d 

Los mismos datos Estoy tratando de obtener el uso de Java. Después de lograr que se ha cargado, yo uso

x509.getSerialNumber(); 
and result is : 76292708057987193002565060032465481997 

Entonces, ¿cuál es la diferencia entre ambos? Quiero el resultado como superior.

Respuesta

17

de Windows muestra la representación hexadecimal del número de serie, mientras que Java devuelve un resultado BigInteger de X509Certificate.getSerialNumber().

Para mostrar BigInteger como un valor hexadecimal, simplemente llame al toString(16).

BigInteger bi = new BigInteger("76292708057987193002565060032465481997"); 
System.out.println(bi.toString(16)); 

salida será:

396570ebd89f28204ec2a06b9848310d 
+0

También fue convertir a hexadecimal, pero Mi error fue tomando en bytes. es decir ** "76292708057987193002565060032465481997" .getBytes(); ** Así que estaba recibiendo este 3736323932373038303537393837313933303032353635303630303332343635343831393937. Definitivamente, usted me salvó @Duncan, yo estaba tratando durante 3 horas ... –

2

El primero es el valor hexadecimal del certificado. El otro es decimal.

Ahora depende de cómo convierta el certificado inicial bytearray para imprimirlo.

permite decir esto es su certificado:

byte[] cert = { (byte) 0xFD, (byte) 0xB1, (byte) 0xDD, ..., (byte) 0x00 }; 
BigInteger certVal = new BigInteger(cert); 
System.out.println("And result is (hex): " + certVal.toString(16)); 
Cuestiones relacionadas