Ottenere la chiave segreta originale dal formato esadecimale
-
05-07-2019 - |
Domanda
Questo è il formato esadecimale di una chiave segreta utilizzata per la crittografia AES
00010203050607080A0B0C0D0F101112
Posso generare il formato SecretKey originale o l'array di byte da questo?
Se sì, come?
Soluzione
Puoi usare Apache Commons Codec per eseguire la decodifica esadecimale,
http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Hex.html#decodeHex (char [])
Se non si desidera utilizzare alcuna libreria, è possibile farlo anche
byte[] bytes = new BigInteger("7F" + str, 16).toByteArray();
SecretKeySpec key = new SecretKeySpec(bytes, 1, bytes.length-1, "AES");
Devi aggiungere un byte extra 0x7F per evitare che BigInteger rimuova gli zeri iniziali o aggiunga byte firmati.
Altri suggerimenti
A SecretKey
è un'interfaccia. Di che tipo era l'implementazione? J2SE ha due classi di implementazione, KerberosKey
e SecretKeySpec
, entrambi con costruttori con un array di byte come parametro.
Qual è il formato originale di SecretKey?
Sei consapevole che byte []
contiene byte firmati con valori compresi tra -128 e 127?
Ti farebbe male se provassi questo:
byte[] key = {
0x00,0x01,0x02,0x03,0x05,0x06,0x07,0x08,
0x0A,0x0B,0x0C,0x0D,0x0F,0x10,0x11,0x12
};
Nota: se hai valori come 0x80 - 0xFF, devi lanciarli come (byte) 0x80 - (byte) 0xFF per evitare un avviso sull'intervallo.