Как сохранить SecretKey

253
25 ноября 2017, 10:11

Я генерирую случайный ключ шифрования таким способом

KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128);
final SecretKey key = kgen.generateKey();

пытаюсь сохранить его при помощи SharedPreferences но переменная key не строка и не массив байтов, как можно его сохранить?

Answer 1

Вы можете конвертировать в массив byte[].

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());

Обратно:

// 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

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)}

Обратно:

// DECODE YOUR BASE64 STRING
// REBUILD KEY USING SecretKeySpec
byte[] encodedKey     = Base64.decode(stringKey, Base64.DEFAULT);
SecretKey originalKey = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");

Источник

READ ALSO
Проблемы с TableLayout(androidstudio)

Проблемы с TableLayout(androidstudio)

Решил программно добавлять таблицу в приложение, написал, приложение стало вылетать, чувствую что где то накосячил но не знаю где,help!

241
Можно ли как-то отображать динамически изменяющуюся раскладку на Java?

Можно ли как-то отображать динамически изменяющуюся раскладку на Java?

Добрый день, я хочу сделать отображение активного языка раскладки клавиатуры в своём приложении, просто потому что в полноэкранном режиме...

213
Java работа с Timer

Java работа с Timer

Здравствуйте, никак не могу понять, как сделать так, чтобы выводить сколько осталось времени до конца таймеравот код:

258
ClassLoader не хочет считывать класс

ClassLoader не хочет считывать класс

Создал объект ClassLoader вот так

290