问题 如何在mysql中创建带密码字段的表?


我应该将密码列创建为常规varchar,然后像这样插入:

sha1($pass_string)

或者我应该在创建表时做一些额外的事情以确保密码字段是安全的?

谢谢!


8148
2017-09-22 22:49


起源



答案:


这是一个普通的varchar字段(40个字符),但如果你想设置它更安全,你应该使用salt。

http://highedwebtech.com/2008/04/25/season-your-passwords-with-some-salt/

更新:

警告:没有盐的哈希密码真的很难!你永远不应该使用它!

密码腌制是这样做的好方法: 密码腌制

正如pst所建议的那样:

  • 使用SHA-1和盐是更天真但很安全的方法。

  • 运用 bcrypt :

这是更安全的方法:)因为它使用速度以使其更安全,bfish是围绕加密方法blowfish构建的哈希函数。 (似乎比twofish还存在,应该是河豚的“现代”版本)。

它是一个使用SHA-1链的版本,因此它是一个中间解决方案,但允许根据您的需要设置速度。实际上速度会降低您的安全性。


12
2017-09-22 22:53



还应该使用不同的(“计算更加昂贵”)功能,例如 bcrypt 和/或使用HMAC哈希。
是的,绝对是你的哈希。此外,如果您为每个用户使用不同的盐,则有助于防止彩虹表攻击: en.wikipedia.org/wiki/Rainbow_table - Mac
@pst:你能提供更多细节吗? :) - ykatchou
@ykatchou stackoverflow.com/questions/1561174/... (接受答案的底部)和 binarylogic.com/2008/11/22/...  - 并不是说​​SHA不是一个安全的哈希,而是一个天真的单一呼叫 太快了。以来 bcrypt 已经为此设计,我认为没有必要“滚动另一个”(除非你正在设计一个新的算法/方法)。
谢谢你的详细信息 - ykatchou


答案:


这是一个普通的varchar字段(40个字符),但如果你想设置它更安全,你应该使用salt。

http://highedwebtech.com/2008/04/25/season-your-passwords-with-some-salt/

更新:

警告:没有盐的哈希密码真的很难!你永远不应该使用它!

密码腌制是这样做的好方法: 密码腌制

正如pst所建议的那样:

  • 使用SHA-1和盐是更天真但很安全的方法。

  • 运用 bcrypt :

这是更安全的方法:)因为它使用速度以使其更安全,bfish是围绕加密方法blowfish构建的哈希函数。 (似乎比twofish还存在,应该是河豚的“现代”版本)。

它是一个使用SHA-1链的版本,因此它是一个中间解决方案,但允许根据您的需要设置速度。实际上速度会降低您的安全性。


12
2017-09-22 22:53



还应该使用不同的(“计算更加昂贵”)功能,例如 bcrypt 和/或使用HMAC哈希。
是的,绝对是你的哈希。此外,如果您为每个用户使用不同的盐,则有助于防止彩虹表攻击: en.wikipedia.org/wiki/Rainbow_table - Mac
@pst:你能提供更多细节吗? :) - ykatchou
@ykatchou stackoverflow.com/questions/1561174/... (接受答案的底部)和 binarylogic.com/2008/11/22/...  - 并不是说​​SHA不是一个安全的哈希,而是一个天真的单一呼叫 太快了。以来 bcrypt 已经为此设计,我认为没有必要“滚动另一个”(除非你正在设计一个新的算法/方法)。
谢谢你的详细信息 - ykatchou


您还可以使用mysql中内置的AES_ENCRYPT()函数来提高安全性。 链接在这里

这里还有一个很好的解释方法: 链接


2
2017-09-22 22:56





手册 包含一个很好的解释,使用什么类型的列。


2
2017-09-22 23:03





大多数人会按照您的建议保存哈希值。它足够安全和​​简单,是一个不错的选择。

请注意,最终可以破解所有哈希值,因此任何哈希都优于无哈希且SHA足够强。


0
2017-09-22 22:55



这比这更糟糕 - 如果没有盐,琐碎的彩虹桌攻击很容易打破它。此外,单个SHA不太适合密码,因为 它可以非常快速地计算出来。 (bcrypt 和HMAC可以帮助解决这个问题。)
对于小于一个块的数据,hmac是否有用? - ykatchou
@ykatchou哎呀,评论略有不正确。 HMAC-SHA1 不是为了“帮助”速度而设计的,但它可以做的是使用服务器密钥添加另一级别的强化。
@pst:谢谢你,我发现bcrypt :)这对速度有帮助! - ykatchou