2016-04-23 12 views
1

Я использую программное обеспечение форума ipb. У меня есть таблица-член с именем entity и members_pass_hash и members_pass_salt. У меня есть проблема о письменной форме запроса санкционировать членаутентифицировать участника через базу данных с хэшированным/соленым паролем

String Sql="Select * from members where name=? and members_pass_hash=?"; 

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

Я хочу сделать это в java, и я не могу найти никаких руководств по этому вопросу. Вы искали весь день, спасибо.

ответ

1

Вы получили запасной "в конце команды SQL The;. Также не требуется для клиента командной строки MySQL, за исключением (может привести к ошибке в зависимости от вашей клиентской библиотеки)

соленого хэш пароля. обычно проверяется путем получения соли строки (иногда это хранится в виде префикса к хеширован пароля), вычисляя соли и сравнивая результат

В псевдокоде:.

($id, $salt, $stored_hashed_password) = SELECT id, salt, hashed_password FROM members WHERE name=? 
$entered_hash_password = hash_password($salt, $entered_cleartext_password) 
if ($entered_hash_password == $stored_hash_password) { 
    say "Yeah, you got it!"; 
} else { 
    say "Go away!"; 
} 

Сравнение должно быть, очевидно, сравнение строк.

Update: Очень простой пример о беспорядочных паролей:

Аут пароль: 10 Соль "строка": 5 Хэш функция: $ открытым текстом * $ соль Хэшировано пароль: 50

Никто не мог извлеките исходный пароль из хешированного пароля. Пароль может быть 25, 1, 50, 10, 5.

Реальные функции хэша намного сложнее и необратимы.

Функция hash_password(), используемая в примере псевдокода MUST будет использоваться при первоначальном хешировании паролей для их хранения в базе данных. Проверьте функции исходного кода, используемые для «смены пароля»

+0

i фиксированный запрос, у меня его в .java-файле :) Я не понимаю, как настроить hash_password сейчас? мне нужно преобразовать строку, которую они вводят в хеш-пароль? – swipeales

+0

Я добавил еще немного текста в ответ. Я думаю, что IPB написан на PHP, поэтому вы должны пойти на это. В противном случае вам нужно перестроить такую ​​же процедуру хэша паролей в Java. Или начните с реального языка программирования, игнорируя как Java (просто доказательство концепции для ООП), так и PHP (Perl-препроцессор Perl на своей домашней странице);) – Sebastian

+0

благодарит за добавление дополнительной информации, yeah IPB написан на PHP, но мое приложение Java представляет собой настольное приложение, которое нуждается в доступе к базе данных форума. Я видел много форумов ipb с приложением java для настольных компьютеров с учетными данными из учетной записи членов ipb. Могу ли я сделать это в любом случае проще в долгосрочной перспективе? возможно, webservice? ты предлагаешь мне что-нибудь? Я использую драйвер jdbc mysql на данный момент – swipeales