2012-09-25 14 views
9

Ho bisogno di ottenere alcuni dati dal certificato X509.numero di serie X509 utilizzando java

Se apro un file di certificato in Windows, ne viene mostrato il numero di serie in questo formato.

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

Gli stessi dati che sto cercando di ottenere utilizzando java. Dopo averlo caricato, io uso

x509.getSerialNumber(); 
and result is : 76292708057987193002565060032465481997 

Quindi qual è la differenza tra entrambi? Voglio il risultato come quello superiore.

risposta

17

Windows mostra la rappresentazione esadecimale del numero di serie, mentre Java restituisce un risultato BigInteger da X509Certificate.getSerialNumber().

Per visualizzare BigInteger come valore esadecimale, è sufficiente chiamare il numero toString(16).

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

uscita sarà:

396570ebd89f28204ec2a06b9848310d 
+0

mi è stato anche la conversione in esadecimale, ma mio errore stava prendendo in byte. ossia ** "76292708057987193002565060032465481997" .getBytes(); ** Così mi è stato sempre presente 3736323932373038303537393837313933303032353635303630303332343635343831393937. sicuramente è stato salvato me @Duncan, stavo cercando per 3 ore ... –

2

Il primo è il valore esadecimale del certificato. L'altro è decimale.

Ora dipende da come si converte il certificato iniziale bytearray per stamparlo.

permette di dire questo è il certificato:

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)); 
Problemi correlati