|
|
1
73
我问这个问题已经有一段时间了,现在我对密码理论更熟悉了,所以这里有一个更现代的方法: 推理
debian/ubuntu安装包
在数据库的PostgreSQL中激活crypt()和bcrypt
在查询中使用crypt()和gen_salt()比较:传递到现有哈希:
创建一个散列:密码与一个伟大的随机盐:
在php中,bcrypt哈希稍微好一些
有
小心伐木请注意,使用pg_crypto,在从浏览器到php和数据库的传输过程中,密码都是纯文本的。这意味着它们可以被记录 明文 如果不小心处理数据库日志,则执行查询。例如,使用postgresql慢速查询日志可以捕获并记录正在进行的登录查询的密码。 综上所述
如果可以,可以使用php bcrypt,这将减少密码未被清除的时间。尝试确保Linux系统中安装了bcrypt
如果您希望/需要postgres散列,那么安装bcrypt是一种方法,因为默认安装的散列是旧的和损坏的(md5等)。 以下是有关该主题的更多阅读资料: |
|
|
2
16
应用程序应该使用密钥派生函数(如bcrypt或pbkdf2)散列其密码。 Here is more information on secure password storage . …但有时你仍然需要数据库中的加密函数。 你可以使用 pgcrypto 进入SHA256,这是SHA2家族的一员。记住sha0,sha1 md4,和md5是非常坏的,应该 从未 用于密码哈希。 以下是散列密码的正确方法:
盐应该是一个随机生成的大值。这种盐应该受到保护,因为在盐被回收之前,散列不能被破坏。如果您将salt存储在数据库中,那么可以使用sql注入将其与密码散列一起获取。串联主键用于防止两个人拥有相同的密码哈希,即使他们拥有相同的密码。当然这个系统是可以改进的,但这比我见过的大多数系统要好得多。 一般来说,最好在应用程序到达数据库之前对其进行哈希处理。这是因为查询可以显示在日志中,如果数据库服务器是所有的,那么它们可以启用日志以获取明文密码。 |
|
3
8
示例和文档: http://www.postgresql.org/docs/8.3/static/pgcrypto.html
|