【问题标题】:How to create tables with password fields in mysql?如何在mysql中创建带有密码字段的表?
【发布时间】:2011-11-23 06:08:30
【问题描述】:

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

sha1($pass_string)

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

谢谢!

【问题讨论】:

    标签: mysql


    【解决方案1】:

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

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

    更新:

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

    密码加盐是这样做的好方法: password salting

    根据 pst 的建议:

    • 使用 SHA-1 和 salt 是更简单但非常安全的方法。

    • 使用bcrypt

    这是更安全的方法 :) 因为它使用速度来使其更安全,bfish 是围绕加密方法河豚构建的散列函数。 (似乎也没有 twofish 存在,应该是河豚的“现代”版本)。

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

    【讨论】:

    • 还应该使用不同的(“计算成本更高”)函数,例如 bcrypt 和/或使用 HMAC 哈希。
    • 是的,绝对要加盐。此外,如果您为每个用户使用不同的盐,则有助于防止彩虹表攻击:en.wikipedia.org/wiki/Rainbow_table
    • @pst:你能提供更多细节吗? :)
    • @ykatchou stackoverflow.com/questions/1561174/…(已接受答案的底部)和binarylogic.com/2008/11/22/…——并不是说 SHA 不是安全哈希,只是单纯的单个调用 只是太快了。由于 bcrypt 已经为此设计,我认为没有必要“滚动另一个”(除非您正在设计一种新的算法/方法)。
    【解决方案2】:

    The manual 很好地说明了要使用的列类型。

    【讨论】:

      【解决方案3】:

      您还可以使用 mysql 内置的 AES_ENCRYPT() 函数来提高安全性。 Link here

      这里还有一个很好的操作方法进一步解释:link

      【讨论】:

        【解决方案4】:

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

        请注意,所有哈希最终都可能被破解,因此任何哈希都比没有好,并且 SHA 足够强大。

        【讨论】:

        • 这比这更糟糕——没有盐,一个微不足道的彩虹表攻击很容易破坏它。此外,单个 SHA 对于密码来说并不理想,因为它的计算速度非常快。 (bcrypt 和 HMAC 可以帮助解决这个问题。)
        • hmac 对小于一个块的数据有用吗?
        • @ykatchou 哎呀,评论有点不正确。 HMAC-SHA1 并非旨在“帮助”提高速度,但它可以做的是使用服务器密钥添加另一个级别的强化。
        • @pst : 多亏了你,我发现了 bcrypt :) 这有助于提高速度!
        猜你喜欢
        • 1970-01-01
        • 2016-04-27
        • 1970-01-01
        • 1970-01-01
        • 2013-07-05
        • 2012-03-08
        • 2016-06-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多