Я должен хешировать некоторые пароли с солью на postgresql, и я не смог найти любую соответствующую документацию о том, как сделать это.
Таким образом, как я могу хешировать пароли (с некоторыми солями) в postgresql?
Приложение должно хешировать свои пароли с помощью функции получения ключа как bcrypt или pbkdf2. Дополнительная информация о безопасном хранении паролей .
... но иногда вам все же нужны криптографические функции в базе данных.
Вы можете использовать pgcrypto , чтобы получить доступ к sha256, который является членом семейства sha2. Имейте в виду, что sha0, sha1 md4 и md5 очень повреждены и не должны никогда использоваться для хэшей паролей.
Ниже приведен хороший метод хеширования паролей:
digest("salt"||"password"||primary_key, "sha256")
Соль должна быть большим случайно сгенерированным значением. Эта соль должна быть защищена, потому что хеши нельзя сломать, пока соль не будет восстановлена. Если вы храните соль в базе данных, ее можно получить вместе с хешем пароля с помощью sql-инъекции. Объединение первичного ключа используется для предотвращения того, чтобы два человека имели одинаковый хэш пароля, даже если у них один и тот же пароль. Конечно, эту систему можно улучшить, но она намного лучше, чем большинство систем, которые я видел.
Обычно лучше всего выполнить хеширование в приложении до того, как оно попадет в базу данных. Это связано с тем, что запросы могут отображаться в журналах, и, если сервер базы данных принадлежал, они могли включить ведение журнала для получения паролей в открытом виде.
Примеры и документация на: http://www.postgresql.org/docs/8.3/static/pgcrypto.html
UPDATE ... SET pswhash = crypt('new password', gen_salt('md5'));
SELECT pswhash = crypt('entered password', pswhash) FROM ... ;