Подтвердить что ты не робот

Новая строка, добавленная в мою зашифрованную строку

В главном:

public static void main(String[] args) throws NoSuchAlgorithmException {
    System.out.println("encrypt:" + encryptPassword("superuser")+":" );
}

public static String encryptPassword(final String password) throws NoSuchAlgorithmException {
    MessageDigest md = MessageDigest.getInstance("MD5");
    byte[] hashPassword = md.digest(password.getBytes());
    String encryPass = Base64.encodeBase64String(hashPassword);
    return encryPass;
}

Я получаю этот вывод:

encrypt:C66i8K4gFQ23j1jN2sRCqQ==:

Но когда я реализовал то же самое в своем приложении, я получаю вывод ниже:

encrypt:C66i8K4gFQ23j1jN2sRCqQ==
:

Примечание. добавлена ​​новая строка в моей зашифрованной строке.

код приложения:

public boolean authenticateUsernamePasswordInternal(UsernamePasswordCredentials credentials) {
    try {
        System.out.println("encrypt:" + getHash("superuser")+":" );
    } catch (Exception e) {
        logger.error(e.getMessage(), e);
        throw new BadCredentialsAuthenticationException(ErrorConstants.CONNECTION_FAILED);
    }
}

private String getHash(String password) throws NoSuchAlgorithmException, UnsupportedEncodingException{  
    MessageDigest md = MessageDigest.getInstance("MD5");
    byte[] hashPassword = md.digest(password.getBytes());
    String encryPass = Base64.encodeBase64String(hashPassword);
    return encryPass;
}

Как удалить эту дополнительную строку. почему это произошло, пожалуйста, помогите мне , в чем причина?

4b9b3361

Ответ 1

Возможно, я опоздал с ответом на это, но столкнулся с той же проблемой. На самом деле проблема здесь Base64.encodeBase64String(hashPassword)

Измените эту строку так, чтобы она работала: Base64.encodeBase64String(hashPassword,Base64.NO_WRAP)

По умолчанию Android Base64 util добавляет символ новой строки в конец закодированной строки. Флаг Base64.NO_WRAP сообщает утилите создавать закодированную строку без символа новой строки.

Проверьте здесь

Ответ 2

Использование:

String encryPass = Base64.encodeBase64String(hashPassword).trim();

Ответ 3

Более чистый вариант без обрезки:

String encryPass = BaseEncoding.base64().encode(hashPassword);

Ответ 4

Это зависит от реализации Base64.encodeBase64String(). Что это за метод?

Если это из сообщества Apache, имейте в виду, что существует несколько разных классов, которые обрабатывают пробелы по-разному.

Например, org.apache.commons.net.util.Base64 выводит chunks и, вероятно, добавляет последовательность CR-LF в последний фрагмент.

Более распространенная версия org.apache.commons.codec.binary.Base64 не добавляет пробелов.