преобразовать массив байтов в строку Base64 в android

Итак, у меня есть пользователь, который вводит пароль для регистрации из приложения для Android.

Прежде чем сохранить пароль в базе данных на сервере, я хочу преобразовать его в односторонний хеш MD5 и сохранить в базе данных.

MessageDigest md = null;
    try {
        md = MessageDigest.getInstance("MD5");
    } catch (NoSuchAlgorithmException e3) {
        // TODO Auto-generated catch block
        e3.printStackTrace();
    }
    try {
        md.update(password.getBytes("UTF-8"));
    } catch (UnsupportedEncodingException e3) {
        // TODO Auto-generated catch block
        e3.printStackTrace();
    }
    byte raw[] = md.digest();

Как преобразовать этот массив байтов в строку Base64. Я видел на каком-то форуме, что пакет утилиты для Android не включает кодировку и декодирование Base64, с другой стороны, я вижу функцию encodetoString на сайте разработчиков Android.

Любая помощь приветствуется.


person Aakash    schedule 01.12.2010    source источник


Ответы (3)


Если вы хотите, чтобы ваше приложение было совместимо ниже уровня API 8, вы можете подключить стороннюю библиотеку для обработки кодировки Base64.

Вы можете попробовать кодек Apache Commons. Он включает кодек Base64: http://commons.apache.org/codec/api-release/index.html.

person Eric Levine    schedule 01.12.2010
comment
Хорошая компактная реализация с очень либеральной лицензией находится здесь - person President James K. Polk; 01.12.2010
comment
android.util.Base64 доступен, начиная с уровня API 8 (Android 2.2). Если есть необходимость поддерживать более ранние версии ОС, то это не вариант. - person Eric Levine; 01.12.2010

Для такого базового служебного класса, поскольку существует поздняя реализация Base64 в API 8, я бы скопировал последний исходный код из репозитория AOSP git для моего собственного пакета приложения. Он компилируется с API уровня 3.

Таким образом, вы можете кодировать в своем приложении тот же API, что и официальная реализация Base64 для Android, и оставаться совместимым со всеми версиями Android. В тот день, когда API 8 станет самой старой версией Android на рынке, вам просто нужно будет удалить свою версию класса в своем пакете и обновить импорт до официального android.util.Base64.

Подсказка Eclipse: просто перейдите по ссылке, которую я предоставил на источник в вашем браузере, Ctrl-A, чтобы выбрать весь код, Ctrl-C, чтобы скопировать его, откройте Eclipse, щелкните пакет, в котором вы хотите создать класс, нажмите Ctrl- В. Файл .java создается автоматически с измененным исходным кодом с правильным объявлением пакета.

person Kevin Gaudin    schedule 01.12.2010
comment
Вид заставляет меня съеживаться, но это быстрое решение. Спасибо! - person Matt Briançon; 31.03.2011
comment
Код можно найти здесь: ссылка - person Ben; 15.09.2012

Вот как я это сделал... Просто этот код после кода выше в моем вопросе.

StringBuffer hexString = new StringBuffer();
    for (int i=0; i<raw.length; i++)
        hexString.append(Integer.toHexString(0xFF & raw[i]));
    password = hexString.toString();

Спасибо.

person Aakash    schedule 01.12.2010
comment
Этот ответ неверен, этот ответ кодирует байты как HEX, а вопрос задает BASE64, между этими двумя кодировками есть ОГРОМНАЯ разница. - person Ferrybig; 19.04.2016