我需要一些哈希密码与PostgreSQL的盐,我一直没能找到关于如何弄完任何相关文件。
所以,我怎么可以散列在PostgreSQL中的密码(与一些盐)?
我需要一些哈希密码与PostgreSQL的盐,我一直没能找到关于如何弄完任何相关文件。
所以,我怎么可以散列在PostgreSQL中的密码(与一些盐)?
它已经有一段时间我问这个问题,我更熟悉的密码理论了,所以这里是更现代的方法:
sudo apt-get install postgresql // (of course)
sudo apt-get install postgresql-contrib libpq-dev // (gets bcrypt, crypt() and gen_salt())
sudo apt-get install php5-pgsql // (optional if you're using postgresql with php)
// Create your database first, then:
cd `pg_config --sharedir` // Move to the postgres directory that holds these scripts.
echo "create extension pgcrypto" | psql -d yOuRdATaBaSeNaMe // enable the pgcrypo extension
比较:通过对现有散有:
select * from accounts where password_hash = crypt(:pass, password_hash);
//(note how the existing hash is used as its own individualized salt)
与一个伟大的随机盐密码:创建的哈希:
insert into accounts (password) values crypt(:password, gen_salt('bf', 8));
//(the 8 is the work factor)
有password_*
在PHP 5.5及以上的,允许用bcrypt平凡简单的密码散列函数(约时间!),并且对于低于版本向后兼容库。 普遍认为,散列回落到包装Linux系统呼吁降低CPU使用率,无论如何,虽然你可能希望确保它安装在服务器上。 请参阅: https://github.com/ircmaxell/password_compat (需要PHP 5.3.7+)
请注意,pg_crypto,密码是明文所有来自浏览器的传输过程中,到PHP,到数据库中。 这意味着他们可以在明码查询,如果你不小心你的数据库日志记录。 例如,具有PostgreSQL的慢查询日志可以赶上并从正在进行的登录查询日志的密码。
使用PHP bcrypt如果可以的话,它会减少,密码仍然未散列的时间。 尽量保证你的Linux系统已经安装bcrypt在它crypt()
所以这是高性能的。 至少升级到PHP强烈建议5.3.7+作为PHP的实现是稍微从PHP 5.3.0马车到5.3.6.9,以及不适当地回落到破DES
没有在PHP 5.2.9和较低的警告。
如果你想在-Postgres的散列/需要,安装bcrypt是要走的路,因为默认安装的哈希值是破烂不堪(MD5等)。
下面是有关该主题的更多阅读参考:
应用程序应该使用哈希像bcrypt或PBKDF2密钥导出函数的密码。 这里是安全的密码存储的详细信息 。
...但有时你仍然需要在数据库中cryptogrpahic功能。
您可以使用pgcrypto以访问SHA256这是SHA2家族的一员。 请记住sha0,SHA1 MD4和MD5是非常有问题, 绝不应使用密码哈希值。
以下是散列的口令的方法好吗:
digest("salt"||"password"||primary_key, "sha256")
该盐应是一个大的随机生成值。 这种盐应该受到保护,因为直到盐回收散列不能被打破。 如果要存储的盐在数据库中,然后就可以使用SQL注入,密码哈希一起获得。 串联主键是用来防止2人不必即使他们有相同的密码相同的密码哈希值。 当然,这个系统还有待改进,但是这是远远好于大多数系统我都看到了。
一般来说,最好是做散列在您的应用程序它击中数据库之前。 这是因为querys可以在日志中记录,如果数据库服务器拥有那么他们可以启用日志记录得到明文密码。
实例和文档上: 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 ... ;