据我了解,生成盐的最佳做法是使用源代码中存储的一些神秘公式(甚至魔术常量).
我正在研究一个我们打算作为开源发布的项目,但问题是源代码是生成盐的秘密公式,因此能够在我们的网站上运行彩虹表攻击.
我认为很多人在我面前都考虑过这个问题,我想知道最佳做法是什么.在我看来,如果代码是开源的话,根本就没有盐,因为盐可以很容易地进行逆向工程.
思考?
在Linux系统中,使用MD5哈希存储密码.为什么"盐"的使用可以更多地保护系统?特别是,我想说明以下两点
/etc/shadow.例如,用户A具有用户salt s1并生成h1; h1 = md5(password.s1);.下一次,它使用salt s2,系统必须生成不同的哈希值h2 = md5(password.s2).由于h1不等于h2,系统如何验证用户?
在阅读了有关盐密码散列的内容后,我想为管理区域实现一个简单的版本,以便建立一个网站.
如果你有很好的链接代码已经很好地实现了这个想法,如果你能分享,我将不胜感激.
谢谢,
如果我有一个随机的,16个字符长的字母数字盐(不同的情况),每个用户生成和存储,我是否还需要一个站点范围的盐?
换句话说,这样好吗?
sha1($user_salt . $password)
Run Code Online (Sandbox Code Playgroud)
我应该这样做吗?
sha1($user_salt . $password . $site_salt)
Run Code Online (Sandbox Code Playgroud)
也,
目前,我有一个加密的cookie,用于查找数据库中的会话.在此会话中,有一个user_id和一个user_token.然后我使用user_id查询数据库 - 如果DB === user_token中的user_id + hash的sha1,则允许用户通过.
我在每个页面加载时对user_id进行第二次查询,这样如果我删除,禁止或更改用户的密码,该操作立即生效.
这就是我在这里通过网站和问题查看的内容.你怎么看?我错过了什么?
我需要添加角色检查,但这可能会添加另一个查询(第3个仅用于auth).有小费吗?
salt ×4
passwords ×2
php ×2
security ×2
encryption ×1
hash ×1
md5 ×1
open-source ×1
rainbowtable ×1
session ×1