Vous pouvez convertir le SecretKey
en un tableau d'octets ( byte[]
), puis l'encoder en Base64 en un String
. Pour reconvertir en a SecretKey
, Base64 décode la chaîne et l'utiliser dans a SecretKeySpec
pour reconstruire votre original SecretKey
.
Pour Java 8
SecretKey à String:
// create new key
SecretKey secretKey = KeyGenerator.getInstance("AES").generateKey();
// get base64 encoded version of the key
String encodedKey = Base64.getEncoder().encodeToString(secretKey.getEncoded());
Chaîne à 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");
Pour Java 7 et versions antérieures (y compris Android):
REMARQUE I: vous pouvez ignorer la partie encodage / décodage Base64 et simplement stocker le byte[]
dans SQLite. Cela dit, effectuer un encodage / décodage Base64 n'est pas une opération coûteuse et vous pouvez stocker des chaînes dans presque n'importe quelle base de données sans problèmes.
REMARQUE II: les versions précédentes de Java n'incluent pas de Base64 dans l'un des packages java.lang
ou java.util
. Il est cependant possible d'utiliser des codecs d' Apache Commons Codec , Bouncy Castle ou Guava .
SecretKey à String:
// 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)}
Chaîne à 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");
String
instances en Java tandis que les objets clés et les tableaux d'octets peuvent être effacés. Cela signifie que les clés peuvent rester disponibles dans la mémoire pendant une période de temps plus longue. L'utilisation d'un (protégé par mot de passe)KeyStore
, de préférence un supporté par le système d'exécution / OS ou même le matériel doit être préféré.