Sie können das SecretKeyin ein Byte-Array ( byte[]) konvertieren und Base64 das dann in ein codieren String. Um wieder in a zu konvertieren SecretKey, dekodiert Base64 den String und verwendet ihn in a SecretKeySpec, um Ihr Original neu zu erstellen SecretKey.
Für Java 8
SecretKey to String:
// create new key
SecretKey secretKey = KeyGenerator.getInstance("AES").generateKey();
// get base64 encoded version of the key
String encodedKey = Base64.getEncoder().encodeToString(secretKey.getEncoded());
String zu 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");
Für Java 7 und früher (einschließlich Android):
HINWEIS I: Sie können den Base64-Codierungs- / Decodierungsteil überspringen und den byte[]in SQLite speichern . Das Durchführen der Base64-Codierung / -Decodierung ist jedoch kein teurer Vorgang, und Sie können Zeichenfolgen problemlos in nahezu jeder Datenbank speichern.
HINWEIS II: Frühere Java-Versionen enthalten kein Base64 in einem der Pakete java.langoder java.util. Es ist jedoch möglich, Codecs aus Apache Commons Codec , Bouncy Castle oder Guava zu verwenden .
SecretKey to 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)}
String zu 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");
StringInstanzen in Java, während Schlüsselobjekte und Bytearrays möglicherweise gelöscht werden. Dies bedeutet, dass Schlüssel für einen längeren Zeitraum im Speicher verfügbar bleiben können. Die Verwendung eines (kennwortgeschützten)KeyStore, vorzugsweise eines, das vom Laufzeitsystem / Betriebssystem oder sogar von der Hardware unterstützt wird, sollte bevorzugt werden.