У меня дилемма. У меня есть поле hashedX, которое является хешированным/соленым значением, и соль сохраняется в той же строке в базе данных mysql, что является обычной практикой.
hashedX saltX
------ ------
hashed1 ssai3
hashed2 woddp
hashed3 92ofu
Когда я получаю inputX, мне нужно знать, соответствует ли оно какому-либо из значений в hashedX, например hashed1 hashed2 или hashed3. Так что обычно я брал свои входные данные, хэшировал/солил их и сравнивал со значениями hashedX. Псевдокод:
$hashed_input = hash ($input with $salt );
select * from tablename where $hashed_input is hashedX
Проблема в том, что я не знаю, какое saltX мне нужно, чтобы добраться до $hashed_input, прежде чем я смогу сделать select.
Я мог бы просмотреть строки базы данных одну за другой, попробовать эту соль на своем входе, а затем проверить, соответствует ли ввод, хешированный/солёный с этой солью, hashedX той же строки. Если у меня есть 100 000 записей, я предполагаю, что это будет мучительно медленно. Я понятия не имею, насколько медленно, так как я не очень хорошо разбираюсь в базах данных.
- Есть ли лучший способ сделать это, чем выбирать все строки, перебирать их, использовать соль этой строки для ввода хэша, а затем снова сравнивать с хешированным значением в БД?