механизм хеширования действительно безопасен?
Ну, я всегда видел (и следовал) людей, которые говорили, что используют механизм хеширования для хранения паролей в базе данных. Я действительно обеспокоен, это безопасно?
Пойдем с примером.
Позволять'скажем, я хакер, и я получил имя вашей базы данных, идентификатор и пароль. Теперь у меня есть полный доступ к вашей базе данных.
То, что люди говорят, пароли должны быть хэшированы, потому что если кто-то взломает, они видны хакерам.
так что если я запускаю запрос какselect id, password FROM userDetails
Я получу данные как ниже
++++++++++++++++++++++++++++
+ id + password +
++++++++++++++++++++++++++++
+ id01 + password01 +
+ id02 + password02 +
++++++++++++++++++++++++++++
Вариант 2: с хэш++++++++++++++++++++++++++++
+ id + password +
++++++++++++++++++++++++++++
+ id01 + hasValue01 +
+ id02 + hasValue02 +
++++++++++++++++++++++++++++
Ну, все же я говорю, хеширование небезопасно. Почему я расскажу вам ниже с кодом Java.
PreparedStatement pst = conn.prepareStatement("SELECT id, password FROM userDetails");
ResultSet rs = pst.executeQuery();
String randomPassword = "";
StringBuffer sb;
boolean myPassCheck = true;
while (rs.next()) {
myPassCheck = true;
while (myPassCheck) {
// this will generate random password
randomPassword = generateRandomPassword();
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] array = md.digest(randomPassword.getBytes());
sb = new StringBuffer();
for (int i = 0; i < array.length; ++i) {
sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1, 3));
}
if (sb.toString().equals(rs.getString(2))) {
// this is password
myPassCheck = false;
System.out.print("id=" + rs.getString(1) + ", password=" + sb.toString());
}
}
}
Таким образом, я могу напечатать имя пользователя и пароль. (Я знаю, что мне придется генерировать случайный пароль, пока я не нашел пароль). Однако, таким образом, механизм хеширования пароля также не работает.
Также я полагаю, что в этом мире есть расшифровщик, который преобразует хеш-данные в реальные данные.
Следовательно, я думаю
Безопасен ли механизм хеширования?Редактировать 1Я говорю не только о MD5. Я выбираю MD5 для примера ТОЛЬКО. Я говорю о любом механизме безопасного пароля