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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top