我读过几篇关于密码加密的文章,我读到的似乎是bcrypt的方法。
我对密码学知之甚少,如果我将用户名添加到密码中并对其进行散列,从安全性的角度看,这有什么区别吗?
另外,为每个用户创建一个salt是否有意义?如果我的数据库被泄露,这些盐类也会存在,我是否也应该用全局盐加密这些盐类呢?
同时加密用户的电子邮件地址也有意义吗?
我计划做的是:
+use bcrypt
+allow all characters in passwords
+force User to use a digit and special char in his password
+set the minimum password length to 8 chars我并不是在构建一个需要超级高安全标准的应用程序,但我想为我的用户提供一些串连保护,以防我的DB被泄露。(希望不会)
发布于 2013-09-12 14:39:46
从安全性的角度来看,如果我将用户名添加到密码和散列中,会有什么不同吗?
没有额外的安全性,特别是如果您已经在使用盐。它的缺点是每次用户更改用户名时都必须重新散列并将其持久化。
另外,为每个用户创建一个salt是否有意义?
是的,这是常见的做法。
如果我的数据库被泄露,这些盐类也会存在,我是否也应该用全局盐加密这些盐类呢?
不,不要加密。SALT的目的只是迫使攻击者对每个用户/密码执行新的蛮力搜索,而不是对所有人执行一次暴力攻击。
同时加密用户的电子邮件地址也有意义吗?
不是的。除非你对此有一些(奇怪的)业务要求。
发布于 2013-09-12 14:40:00
感谢你在执行之前问了这个问题。不幸的是,这是我对你最乐观的地方。
安全是很难做好的。事实上,很难做对的事。如果你对此知之甚少,那就在你知道之前不要尝试。同时,使用一个经过验证的基础结构,以(希望)正确的方式为您做到这一点。无论您使用的是什么框架,都应该有一个可用的框架,如果没有,这可能是切换的充分理由。
这就是说,不要使用用户名的盐分,也不要费心加密盐。您也不应该加密(或哈希)用户的电子邮件地址,除非您或其他任何人将永远不需要知道它(作为系统的维护者)。并且将用户名添加到密码中没有好处,也有几个缺点,所以也不要这样做。
就一种独特的盐而言,这是必须的。没有它,你最好没有一个。在继续之前,先阅读一些关于加密、散列和盐渍(和胡椒)的内容。更好的是,使用前面提到的已经为您做过的库。
https://stackoverflow.com/questions/18767180
复制相似问题