SQL:MD5()vs hex()

时间:2011-02-16 17:22:56

标签: php sql sqlite hash md5

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

我无法在stackoverflow或google上找到任何内容。

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


编辑:超级尴尬的错误,我实际上是十六进制(),而不是哈希() - 抱歉错误

6 个答案:

答案 0 :(得分:2)

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

您希望在将密码存储在SQLite数据库之前创建哈希值。使用PHP hash()函数,如其他答案所示。

答案 1 :(得分:1)

你也将它标记为PHP,那么为什么不使用PHP函数来完成你需要的东西呢?由于人们离开sha1()md5()PHPass似乎很热。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:1)

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

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

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

答案 5 :(得分:0)

您可能正在使用PHP hash()函数,它更具功能性。我会远离SHA1和MD5,因为它们都有漏洞或已知的反向查找表(IE,如果有人获得了哈希密码,他们可以去许多在线网站并输入它,它会给他们一个密码当通过MD5或SHA1传递时,将提供相同的密码。)

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