Если хранить пароли открытым текстом, то в момент утечки базы данных раскрываются все учётные записи. Поэтому пароли преобразуют в хеш и хранят именно его, а при входе сравнивают хеш введённого значения. Так как исходный текст не хранится, даже при утечке узнать пароль напрямую нельзя.
Но одного лишь хеша SHA-256 недостаточно. Поскольку одинаковый пароль всегда даёт одинаковый хеш, атакующий может массово сверять их по радужной таблице, где заранее вычислены хеши распространённых паролей. Чтобы этому помешать, к каждой учётной записи нужно добавлять случайное значение — соль (salt) — и хешировать вместе с ним.
Проблема и в скорости. SHA-256 очень быстр, поэтому атакующий может перебирать миллиарды вариантов в секунду. Поэтому для паролей применяют намеренно медленные специализированные хеши вроде bcrypt, scrypt и Argon2. Они регулируют число итераций и затраты памяти, значительно замедляя перебор.
Итого три принципа хранения паролей: соль + медленный специализированный хеш + достаточные параметры стоимости. Обычные SHA-256/512 подходят для проверки целостности файлов и подписей, но для хранения паролей используйте специализированный алгоритм вроде Argon2.