javax.crypto.SecretKey
- это двоичные данные, поэтому вы не можете преобразовать их напрямую в строку. Вы можете закодировать его в виде шестнадцатеричной строки или в Base64.
См. Кодек Apache Commons .
Обновление : если вы не хотите зависеть от сторонних библиотек (и не можете / не хотите хранить простые двоичные данные, как предлагает Джон), вы можете выполнить специальное кодирование Например, следуя предложению Эриксона:
public static String bytesToString(byte[] b) {
byte[] b2 = new byte[b.length + 1];
b2[0] = 1;
System.arraycopy(b, 0, b2, 1, b.length);
return new BigInteger(b2).toString(36);
}
public static byte[] stringToBytes(String s) {
byte[] b2 = new BigInteger(s, 36).toByteArray();
return Arrays.copyOfRange(b2, 1, b2.length);
}
Это довольно, некрасиво, нестандартно и не оптимально (по размеру вывода). Но он также очень маленький, правильный и не имеет никаких зависимостей; это может быть практичным, особенно если ваши данные небольшого размера.
Обновлено: я заменил Character.MAX_RADIX
на буквальное значение (36), следуя комментарию GregS. Это может показаться менее элегантным, но на самом деле это более безопасно. (Вы также можете использовать 32 или 16).