Ви можете перетворити SecretKey
масив у байт ( byte[]
), а потім кодувати Base64 в a String
. Щоб перетворити назад в a SecretKey
, Base64 декодує String і використовувати його SecretKeySpec
для відновлення оригіналу SecretKey
.
Для Java 8
SecretKey до рядка:
// create new key
SecretKey secretKey = KeyGenerator.getInstance("AES").generateKey();
// get base64 encoded version of the key
String encodedKey = Base64.getEncoder().encodeToString(secretKey.getEncoded());
Рядок для 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 і раніше (включаючи Android):
ПРИМІТКА I: ви можете пропустити частину кодування / декодування Base64 і просто зберегти byte[]
в SQLite. Однак, виконання кодування / декодування Base64 не є дорогою операцією, і ви можете зберігати рядки майже в будь-якій БД без проблем.
ПРИМІТКА II: Раніші версії Java не містять Base64 в одному з пакетів java.lang
або java.util
. Однак можливо використовувати кодеки з Apache Commons Codec , Bouncy Castle або Guava .
SecretKey до рядка:
// 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)}
Рядок для 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
екземплярів у Java, хоча ключові об'єкти та байтові масиви можуть бути очищені. Це означає, що ключі можуть залишатися доступними в пам'яті довший період часу. Використовуючи (захищений паролем)KeyStore
, слід віддати перевагу такому, який підтримується системою / ОС або навіть апаратним забезпеченням.