Новая строка, добавленная в мою зашифрованную строку
В главном:
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;
}
Как удалить эту дополнительную строку.
почему это произошло, пожалуйста, помогите мне , в чем причина?
Ответы
Ответ 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
не добавляет пробелов.