Вопрос-ответ

Encoding as Base64 in Java

Кодирование как Base64 в Java

Мне нужно закодировать некоторые данные в кодировке Base64 в Java. Как мне это сделать? Как называется класс, который предоставляет кодировщик Base64?


Я пытался использовать sun.misc.BASE64Encoder класс, но безуспешно. У меня есть следующая строка кода Java 7:

wr.write(new sun.misc.BASE64Encoder().encode(buf));

Я использую Eclipse. Eclipse помечает эту строку как ошибку. Я импортировал необходимые библиотеки:

import sun.misc.BASE64Encoder;
import sun.misc.BASE64Decoder;

Но опять же, оба они отображаются как ошибки. Я нашел похожий пост здесь.

Я использовал Apache Commons в качестве решения, предложенного путем включения:

import org.apache.commons.*;

и импорт файлов JAR, загруженных с: http://commons.apache.org/codec /

Но проблема все еще существует. Eclipse по-прежнему показывает ошибки, упомянутые ранее. Что мне делать?

Переведено автоматически
Ответ 1

Вам нужно изменить импорт вашего класса:

import org.apache.commons.codec.binary.Base64;

А затем измените свой класс, чтобы использовать класс Base64.

Вот несколько примеров кода:

byte[] encodedBytes = Base64.encodeBase64("Test".getBytes());
System.out.println("encodedBytes " + new String(encodedBytes));
byte[] decodedBytes = Base64.decodeBase64(encodedBytes);
System.out.println("decodedBytes " + new String(decodedBytes));

Затем прочтите, почему вам не следует использовать sun.* пакеты.


Обновление (2016-12-16)

Теперь вы можете использовать java.util.Base64 с Java 8. Сначала импортируйте его, как вы обычно делаете:

import java.util.Base64;

Затем используйте статические методы Base64 следующим образом:

byte[] encodedBytes = Base64.getEncoder().encode("Test".getBytes());
System.out.println("encodedBytes " + new String(encodedBytes));
byte[] decodedBytes = Base64.getDecoder().decode(encodedBytes);
System.out.println("decodedBytes " + new String(decodedBytes));

Если вы хотите напрямую закодировать строку и получить результат в виде закодированной строки, вы можете использовать это:

String encodeBytes = Base64.getEncoder().encodeToString((userName + ":" + password).getBytes());

Подробнее смотрите документацию Java для Base64.

Ответ 2

Используйте класс Java 8 "Никогда не поздно присоединиться к веселью": java.util.Base64

new String(Base64.getEncoder().encode(bytes));
Ответ 3

В Java 8 это может быть сделано следующим образом: Base64.getEncoder().encodeToString(string.getBytes(StandardCharsets.UTF_8))

Вот краткий, самодостаточный полный пример:

import java.nio.charset.StandardCharsets;
import java.util.Base64;

public class Temp {
public static void main(String... args) throws Exception {
final String s = "old crow medicine show";
final byte[] authBytes = s.getBytes(StandardCharsets.UTF_8);
final String encoded = Base64.getEncoder().encodeToString(authBytes);
System.out.println(s + " => " + encoded);
}
}

Вывод:

old crow medicine show => b2xkIGNyb3cgbWVkaWNpbmUgc2hvdw==
Ответ 4

Вы также можете конвертировать, используя кодировку Base64. Для этого вы можете использовать javax.xml.bind.DatatypeConverter#printBase64Binary метод.

Например:

byte[] salt = new byte[] { 50, 111, 8, 53, 86, 35, -19, -47 };
System.out.println(DatatypeConverter.printBase64Binary(salt));
java