Как закодировать и раскодировать Base64
Короткий ответ
Base64 превращает байты в текст из латинских букв, цифр и знаков +, /, =. Строку сначала переведите в байты:
void main() {
String text = "Hello, Java!";
String encoded = Base64.getEncoder().encodeToString(text.getBytes(StandardCharsets.UTF_8));
IO.println(encoded);
}Результат:
SGVsbG8sIEphdmEhОбратно
Декодер возвращает массив байтов — из него снова сделайте строку:
void main() {
byte[] bytes = Base64.getDecoder().decode("SGVsbG8sIEphdmEh");
IO.println(new String(bytes, StandardCharsets.UTF_8));
}Результат:
Hello, Java!Для адресов и токенов
Обычный Base64 содержит + и /, которые в адресах имеют особый смысл. Вариант для URL заменяет их на - и _:
void main() {
byte[] data = {(byte) 0xfb, (byte) 0xff, (byte) 0xbf};
IO.println(Base64.getEncoder().encodeToString(data));
IO.println(Base64.getUrlEncoder().withoutPadding().encodeToString(data));
}Результат:
+/+/
-_-_Частая ошибка
Считать Base64 шифрованием. Это просто другая запись данных: любой может раскодировать строку обратно без ключа. А строка с недопустимыми символами вызывает исключение:
void main() {
Base64.getDecoder().decode("not base64!");
}Результат:
Exception in thread "main" java.lang.IllegalArgumentException: Illegal base64 character 20