Нужно ли передавать объект MessageDigest из реестра в логин? - PullRequest
0 голосов
/ 13 мая 2011

Хорошо, я немного запутался. Я пытаюсь использовать MessageDigest для хранения моих паролей в базе данных в виде хэшей MD5, а затем извлекаю хеш для проверки пароля пользователя при попытке входа в систему.

Итак, когда пользователь регистрируется в register.jsp, я использую этот код для преобразования его пароля (в коде строка называется «password») в хеш (называемый «hashtext»):

MessageDigest m = MessageDigest.getInstance("MD5");
m.reset();
m.update(password.getBytes());
byte[] digest = m.digest();
BigInteger bigInt = new BigInteger(1,digest);
String hashtext = bigInt.toString(16);

while(hashtext.length() < 32 ){
  hashtext = "0"+hashtext;
}

Затем мне нужно решить, как проверить пароль, введенный, когда пользователь пытается войти в систему. У меня есть другая страница: login.jsp, где я запускаю точно такой же код, как указано выше для введенного пароля, и проверяю результат по хешу, который я извлекаю из своей базы данных.

Однако это не работает, и я предполагаю, что это потому, что создан новый объект MessageDigest (MessageDigest.getInstance ("MD5");), и поэтому алгоритм работает по-другому.

Нужно ли убедиться, что в login.jsp используется тот же объект MessageDigest, что и register.jsp?

1 Ответ

0 голосов
/ 13 мая 2011

Однако это не работает, и я предполагаю, что это потому, что создан новый объект MessageDigest (MessageDigest.getInstance ("MD5");), и поэтому алгоритм работает по-другому.

Это не правда.


Нужно ли мне убедиться, что в login.jsp используется тот же объект MessageDigest, что и register.jsp?

номер


Ваша проблема вызвана чем-то другим. Возможно, вы не сохранили хэш исходного пароля в БД, или вы не сравнили его с хэшем введенного пароля, или вы сравниваете хэш в системе, которая использует другую кодировку по умолчанию в getBytes() , Проверьте фактические значения хеша, прежде чем делать выводы.

...