首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用md5保护了它的难度

使用md5保护了它的难度
EN

Stack Overflow用户
提问于 2012-07-09 18:15:41
回答 3查看 260关注 0票数 6

可能重复: PHP密码的安全哈希和salt

我看到有人把密码哈希写成这样,

代码语言:javascript
复制
md5(uniqid(mt_rand('password', 15), true));

这是个安全的方法吗?这算成功了吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-09 18:29:46

这不仅不安全,甚至不起作用。

mt_rand采用两个参数,一个最小值和一个最大值。

代码语言:javascript
复制
mt_rand('password', 15)

这会将'password'转换为int (0),然后在015之间返回一个随机数。

代码语言:javascript
复制
uniqid(mt_rand('password', 15), true)

然后生成一个唯一的ID,并将从前一步到前一步的随机数加在前面:计算如下所示:

代码语言:javascript
复制
144ffb22886d58e1.82100749

这个字符串就是md5'd。

正如您可能看到的,这段代码是100%无用的。原始密码被转换为0并永远丢失,所以您所做的只是散列随机数,这是没有意义的。既然您有了哈希,就没有办法再次验证它。由于密码是转换的,用户输入的任何内容都不重要。

所以,不,这个代码是不安全的,不要使用它。

就我个人而言,我使用phpass库。它是安全的,而且使用简单。

票数 6
EN

Stack Overflow用户

发布于 2012-07-09 18:20:51

不,这不是安全的方法。它是可破解的,在你的例子中,它是不可重复的。您必须用散列本身来存储长时间随机值。如果th DB被破坏,那么就会非常简单地强行执行散列。

您应该知道,MD5和SHA1是PHP中可用的两种最弱的散列算法。

更好的方法是使用crypt()函数,同时使用CRYPT_BLOWFISHPBKDF2

更新

而且,正如PeeHaa所提到的,它不起作用。mt_rand('password', 15)将导致Warning: mt_rand() expects parameter 1 to be long, string given on line X

票数 11
EN

Stack Overflow用户

发布于 2012-07-09 18:18:42

老实说,我甚至不会使用md5作为存储密码的散列算法。我会研究使用类似于bcrypt的东西。而且,我甚至不知道您的示例将如何工作,但是无论如何,如果您想保护它,那么至少要远离md5、sha1,并从其他错误中学习并使用盐类。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11400740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档