PostgreSQL只有MD5加密存储密码。,保存密码的最佳方法是什么?
从阅读黑客日志,似乎MD5本身并不是一个非常安全的方式来存储密码。
我一直在客户端使用MD5 — MD5的MD5,然后再次在数据库—处使用MD5,但我不知道这是更强大的。
首先,是否需要加强存储密码?第二,什么是简单,有效的跨语言方法?
PostgreSQL只有MD5加密存储密码。,保存密码的最佳方法是什么?
从阅读黑客日志,似乎MD5本身并不是一个非常安全的方式来存储密码。
我一直在客户端使用MD5 — MD5的MD5,然后再次在数据库—处使用MD5,但我不知道这是更强大的。
首先,是否需要加强存储密码?第二,什么是简单,有效的跨语言方法?
安装pgcrypto
扩展给你一套功能和使用的工具。 其中有能力使用bcrypt
,这是存储密码的好方法。
如果不在postgres中使用它,你可能会认为它在你使用的语言之外。
相关链接:http://www.postgresql.org/docs/current/static/pgcrypto.html为postgres部分和http://codahale.com/how-to-safely-store-a-password/为动机/解释为什么你想要使用它。
伟大的链接!谢谢! – 2011-12-28 09:32:42
啊,是的 - 很显然,早起并没有帮助我记忆。当用于密码验证时,bcrypt肯定比sha256更好(而且scrypt会更好......) – 2011-12-28 09:50:17
没有必要在数据库中做散列。只要你基础的盐对像可以在不访问哈希密码确定用户名,它只是作为安全到了在应用层面:
password_hash = sha256(user_name + password)
user_id = query("SELECT id FROM user WHERE name=? and password_hash=?",
user_name, password_hash).first()
或者你可以检查两个用户名和密码分开的步骤,并使用用户ID作为盐:
user_id, password_hash = query("SELECT id, password_hash FROM user WHERE name=?",
user_name).first()
if password_hash != sha256(user_id + password):
raise Exception("authentication failed")
user_name是易失性的 - 会对usr_id工作产生影响吗? – 2011-12-28 09:10:49
当然,这也可以工作:'user_id,password_hash = query(“SELECT id,password_hash FROM user WHERE name =?”,user_name);如果password_hash!= sha256(user_id +密码):引发异常(“验证失败”)' – 2011-12-28 09:15:33
选民结束:你会介意解释你的推理吗? – 2011-12-28 09:02:56
对存储过程的广泛使用,因此在移植到应用程序级别之前,传统上都会在db级别测试所有内容。也许你是对的 - 也许我的方法已经让我对盲目失明了。 – 2011-12-28 09:09:39
当然,你也可以使用'pgcrypto':http://www.postgresql.org/docs/8.3/static/pgcrypto.html ...但如果是我,我只会在应用程序级别执行它:) – 2011-12-28 09:17:38