Puoi convertire il SecretKeyin un array di byte ( byte[]), quindi codificarlo in Base64 in un file String. Per riconvertire in a SecretKey, Base64 decodifica la stringa e usala in a SecretKeySpecper ricostruire l'originale SecretKey.
Per Java 8
SecretKey alla stringa:
// create new key
SecretKey secretKey = KeyGenerator.getInstance("AES").generateKey();
// get base64 encoded version of the key
String encodedKey = Base64.getEncoder().encodeToString(secretKey.getEncoded());
String to SecretKey:
// decode the base64 encoded string
byte[] decodedKey = Base64.getDecoder().decode(encodedKey);
// rebuild key using SecretKeySpec
SecretKey originalKey = new SecretKeySpec(decodedKey, 0, decodedKey.length, "AES");
Per Java 7 e versioni precedenti (incluso Android):
NOTA I: puoi saltare la parte di codifica / decodifica Base64 e memorizzare semplicemente il file byte[]in SQLite. Detto questo, eseguire la codifica / decodifica Base64 non è un'operazione costosa e puoi memorizzare le stringhe in quasi tutti i DB senza problemi.
NOTA II: le versioni precedenti di Java non includono un Base64 in uno dei pacchetti java.lango java.util. È comunque possibile utilizzare codec da Apache Commons Codec , Bouncy Castle o Guava .
SecretKey alla stringa:
// CREATE NEW KEY
// GET ENCODED VERSION OF KEY (THIS CAN BE STORED IN A DB)
SecretKey secretKey;
String stringKey;
try {secretKey = KeyGenerator.getInstance("AES").generateKey();}
catch (NoSuchAlgorithmException e) {/* LOG YOUR EXCEPTION */}
if (secretKey != null) {stringKey = Base64.encodeToString(secretKey.getEncoded(), Base64.DEFAULT)}
String to SecretKey:
// DECODE YOUR BASE64 STRING
// REBUILD KEY USING SecretKeySpec
byte[] encodedKey = Base64.decode(stringKey, Base64.DEFAULT);
SecretKey originalKey = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");
Stringistanze in Java mentre gli oggetti chiave e gli array di byte possono essere cancellati. Ciò significa che le chiavi potrebbero rimanere disponibili nella memoria per un periodo di tempo più lungo. L'uso di un (protetto da password)KeyStore, preferibilmente uno supportato dal sistema di runtime / OS o anche dall'hardware dovrebbe essere preferito.