Sie können das SecretKey
in 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.lang
oder 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");
String
Instanzen 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.