Примечание: MD5-хэширования алгоритм никогда не должен использоваться для хранения паролей, так как это хэш легко взломаны. Однако я буду использовать его для простоты.
Решение fast/easy/UNSECURE предназначено для преобразования массива char в строку. Однако это небезопасно, потому что строки неизменяемы и не могут быть очищены от памяти.
String password = new String(passwordInputField.getPassword());
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(password.getBytes());
String hashedPass = new BigInteger(1, md.digest()).toString(16);
Более безопасное решение: преобразовать символ [], чтобы байт [] и очистить массивы из памяти после этого.
private byte[] toBytes(char[] chars) {
CharBuffer charBuffer = CharBuffer.wrap(chars);
ByteBuffer byteBuffer = Charset.forName("UTF-8").encode(charBuffer);
byte[] bytes = Arrays.copyOfRange(byteBuffer.array(),
byteBuffer.position(), byteBuffer.limit());
Arrays.fill(charBuffer.array(), '\u0000'); // clear sensitive data
Arrays.fill(byteBuffer.array(), (byte) 0); // clear sensitive data
return bytes;
}
char[] passChars = passwordInputField.getPassword();
byte[] passBytes = toBytes(passChars);
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(passBytes);
String hashedPass = new BigInteger(1, md.digest()).toString(16);
Arrays.fill(passChars, '\u0000'); // clear sensitive data
Arrays.fill(passBytes, (byte) 0); // clear sensitive data
EDIT:
Обновленный ответ с более безопасным решением (кредитом user2656928 за идею). в andreyne
char[] to byte[] method кредит
Не уверен, что вы приложение, но MD5, как правило, не используется в целях безопасности больше. –
Итак, что бы вы посоветовали использовать? –
Предполагая, что вы хотите хранить и проверять пароль при регистрации, [bcrypt] (https://en.wikipedia.org/wiki/Bcrypt) является сегодня [стандартным] (http://www.javacodegeeks.com/) 2012/08/Bcrypt-соль-ее-голое minimum.html). См. [Этот вопрос] (https://security.stackexchange.com/questions/21184/safe-to-use-jbcrypt-and-recommend-it-to-my-organization) для реализаций Java. –