Możesz przekonwertować SecretKey
tablicę bajtów ( byte[]
), a następnie zakodować ją w formacie Base64 do pliku String
. Aby przekonwertować z powrotem na a SecretKey
, Base64 dekoduje ciąg i używa go w a, SecretKeySpec
aby odbudować oryginał SecretKey
.
W przypadku języka 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());
Ciąg do 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");
Java 7 i starsze (w tym Android):
UWAGA I: możesz pominąć część kodowania / dekodowania Base64 i po prostu zapisać byte[]
w SQLite. To powiedziawszy, wykonywanie kodowania / dekodowania Base64 nie jest kosztowną operacją i można przechowywać ciągi znaków w prawie każdej bazie danych bez problemów.
UWAGA II: Wcześniejsze wersje Java nie zawierają Base64 w żadnym z pakietów java.lang
lub java.util
. Możliwe jest jednak użycie kodeków z Apache Commons Codec , Bouncy Castle lub Guava .
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)}
Ciąg do 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
Javie nie ma jawnej metody niszczenia instancji, podczas gdy kluczowe obiekty i tablice bajtów mogą zostać wyczyszczone. Oznacza to, że klucze mogą pozostać dostępne w pamięci przez dłuższy czas.KeyStore
Preferowane powinno być używanie (chronione hasłem) , najlepiej obsługiwane przez system / system operacyjny lub nawet sprzęt.