Encryption 加密密码&;密码问题

Encryption 加密密码&;密码问题,encryption,Encryption,我读过一些关于加密密码的文章,我读到的似乎是bcrypt 我对密码学几乎一无所知,如果我将用户名添加到密码中并对其进行散列,从安全角度看会有什么不同吗 为每个用户创建一个salt也有意义吗?如果我的数据库被泄露,这些盐也会在那里,我应该用全球盐加密这些盐吗 同时加密用户的电子邮件地址有意义吗 总之,我计划做的是: +use bcrypt +allow all characters in passwords +force User to use a digit and special char i

我读过一些关于加密密码的文章,我读到的似乎是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
我不是在构建一个需要极高安全标准的应用程序,但我想为我的用户提供一些严格的保护,以防我的数据库不知何故被泄露。(希望不会)

如果我将用户名添加到密码中并对其进行哈希运算,从安全角度看会有什么不同吗

没有额外的安全性,特别是如果你已经在使用盐。有一个缺点,每次用户更改用户名时,您都必须重新刷新并持久化哈希

为每个用户创建一个salt也有意义吗

是的,这是经常做的

如果我的数据库被泄露,这些盐也会在那里,我应该用全球盐加密这些盐吗

不,不要加密它们。SALT的目的只是迫使攻击者必须对每个用户/密码执行新的暴力搜索,而不是对所有用户/密码执行一次暴力攻击

同时加密用户的电子邮件地址有意义吗


没有。除非您有一些(奇怪的)业务需求。

在实施之前问了这个问题,这是您的荣幸。不幸的是,这是我对你最好的乐观

安全是很难做对的。事实上,很难做对。如果你对它了解不多,那么在了解之前不要尝试。同时,请使用经过验证的基础架构,以(希望)正确的方式为您做到这一点。无论您使用什么框架,都应该有一个可用的框架,如果没有,这可能是切换的充分理由

也就是说,不要使用盐的用户名,也不要麻烦加密盐。您也不应该加密(或散列)用户的电子邮件地址,除非您或任何其他人(作为系统的维护者)永远不需要知道它。在密码中添加用户名没有好处,也有一些缺点,所以也不要这样做


就一种独特的盐而言,这是必须的。如果没有它,你还不如没有一个。在继续之前,先阅读一些关于加密、哈希和盐渍(和胡椒)的知识。更好的方法是,使用一个已经为您完成了上述操作的库。

这个问题可能是关于散列密码(单向)而不是加密密码(这将允许您解密密码,恢复原始值)?尽管它的名字bcrypt经常用于前者,而不是后者。是的,它是关于以一种方式对密码进行散列的,我没有考虑过关于对用户电子邮件进行散列的问题。