Вы на самом деле не шифруете пароль пользователя, вы его хешируете.
Используйте хеш SHA2, например, SHA-256 или SHA-512.Включите соль и растяжение для дополнительной защиты от атак в автономном режиме.Я не могу сделать Ruby, но вот какой-то псевдокод.
salt <- generateRandomSalt();
method hashPassword(password)
hash <- password
reps <- 5000 // Tune this number to your system
for (reps times)
hash <- hash + salt // Concatenate
hash <- SHA256(hash)
end for
return hash
end hashPassword
Сохраните окончательный хеш и соответствующую соль в вашей базе данных для этого пользователя.В следующий раз, когда пользователь войдет в систему, повторите процесс, используя ту же соль, и сравните окончательные хеши.Если они совпадают, пользователь ввел правильный пароль.
Соль используется, чтобы убедиться, что если два пользователя выберут один и тот же пароль, то их хэши будут разными.Разумно использовать от 64 до 128 бит (от 8 до 16 байт) соли.Растяжение (5000 повторений) - замедление атакующего.Укажите количество повторений, чтобы хэшировать пароль требуется около 0,1 секунды.Задержка на одну десятую секунды не будет замечена пользователем, вошедшим в систему, но это ограничит любого злоумышленника попыткой сделать не более десяти попыток в секунду.