Я бы пошел с односторонним соленым хешем .
Например, используя хэш SHA1, вы сможете сохранить пароль в виде хэша, который нельзя вернуть обратно к исходному паролю. Затем, когда пользователь вводит свой пароль, вы выполняете тот же хэш SHA1 для пароля и сравниваете этот хэш с тем, что вы сохранили в БД, если они совпадают, тогда пароль правильный.
Чтобы дополнительно защитить хэширование, вы можете добавить соль, это, по сути, случайное значение, которое вы генерируете для каждого пользователя, затем создаете учетную запись и сохраняете значение соли в записи пользователя. Когда вы создаете хэш пароля, вы сначала комбинируете пароль с солью и хэшируете это объединенное значение. Чтобы аутентифицировать пользователя, вы комбинируете введенный пароль с солью, сохраненной для пользователя, выполняете хеш для объединенного значения и сравниваете.
Добавляя соль в смесь, вы гарантируете, что хэш для паролей, которые должны быть одинаковыми, имеет другой хэш, потому что соленая часть отличается. Таким образом, если два пользователя имеют один и тот же пароль «Password1234», сохраненный хэш для обоих не будет одинаковым, поэтому невозможно определить, что два пользователя имеют одинаковый пароль.