【问题标题】:SQL: MD5() vs hex()SQL:MD5()与十六进制()
【发布时间】:2011-06-28 12:48:47
【问题描述】:

SQLite 没有内置 MD5,所以我正在考虑使用散列函数。我不太了解散列,但我可以看到 hash() 输出是数字且长度可变,而 MD5() 返回固定长度的混合字符/数字。

我在 stackoverflow 或谷歌上找不到任何关于此的内容。

可以使用带盐的 hash() 来安全地存储密码吗?


编辑:超级尴尬的错误,我实际上是用 hex(),而不是 hash() - 抱歉这个错误

【问题讨论】:

标签: php sql sqlite hash md5


【解决方案1】:

你也把它标记为 PHP,那么为什么不使用 PHP 函数来完成你需要的呢? PHPass 现在似乎很热门,因为人们正在远离 sha1()md5()

【讨论】:

    【解决方案2】:

    只要您使用种子,就可以使用哈希存储密码,并为每个密码使用单独的种子。散列函数创建的值对于唯一字符串是唯一的(您也可以散列其他数据类型),因此它非常适合您的任务。

    【讨论】:

      【解决方案3】:

      使用 php 哈希函数,您可以将 SHA256 传递给第一个参数,它将创建密码 + 盐的强哈希。不需要额外的扩展,对于像银行网站这样的高安全系统以外的 Web 应用程序,sha256 就可以了。它甚至可能是矫枉过正。

      hash('sha256',$salt . $password);
      

      应该做的伎俩。现在您可以将数据保存在数据库的 varchar 列中,因为散列函数输出一个十六进制字符串。散列函数具有可变输出,因为它可以使用许多不同的散列算法。如上所示,带有 sha256 的哈希函数将在字符串中输出 64 个字符。把盐放在开头比放在结尾好,因为哈希开头的随机性比结尾的随机性好。

      【讨论】:

      • @codemonkey 如果你指的是php,md5、sha1、hash的输出已经是一个十六进制字符串,除非你把hash函数的第三个参数设置为true,这样会输出二进制数据。这些算法的实际实现会产生二进制结果,因此在某些语言中,您需要将二进制转换为十六进制以存储在数据库中,但 php 会输出一串十六进制字符。对于给定的算法,字符串的长度将是恒定的。我不熟悉 sqlite 可用的功能,所以我不能说。
      【解决方案4】:

      我在 SQLite 文档中找不到任何关于 hash() 函数的内容。您可能正在使用 SQLite 并包含一些基本的第三方 C/C++ 插件,或者您可能正在使用 PHP hash() 函数(它允许您指定要使用的哈希算法)。

      一般来说,单向散列是一种存储密码的好方法,如果它是 PHP 散列,与 SHA256 一起使用,我看不出它为什么不适合你。请注意,一些散列函数已经证明存在缺陷; MD5 可以产生可预测和可利用的碰撞,SHA1 也存在理论上的漏洞。包括 SHA256 在内的 SHA2 算法基于 SHA1,但尚未显示出同样的弱点。

      在任何情况下,为了帮助确保唯一的散列,请使用产生等于或大于消息的散列的散列算法;证明给定一组有限的散列值,对于大于散列大小的每组消息,不可能有唯一的散列值。

      【讨论】:

        【解决方案5】:

        您可能正在使用 PHP hash() 函数,它的功能性更强。我会远离 SHA1 和 MD5,因为它们都有漏洞或已知的反向查找表(即,如果有人获得了散列密码,他们可以访问许多在线可用的站点并将其输入,它会给他们一个密码这将在通过 MD5 或 SHA1 时提供相同的密码。)

        hash(256) 或 hash(512) 比您可能需要的要多得多,所以这些可能是安全的。只要记住给你的密码加盐。你永远不能太小心。

        【讨论】:

          【解决方案6】:

          hex() 不是加密函数。它所做的只是返回您传递给它的字符串的十六进制值。这不是一种安全的密码存储方式。

          您想在将密码存储到 SQLite 数据库之前创建一个哈希值。按照其他答案的建议,使用 PHP hash() 函数。

          【讨论】:

            猜你喜欢
            • 2011-10-11
            • 2010-12-16
            • 2018-07-26
            • 2011-12-09
            • 2014-08-24
            • 2014-04-20
            • 2011-06-01
            • 2011-02-27
            相关资源
            最近更新 更多