PHP哈希密码创建

3
我想使用php创建一个商业网站,并希望确保我所拥有的用户哈希密码的代码足够强大,以避免暴力攻击。
请注意,我的服务器及其php版本不支持blowfish,因此我正在尝试找到一种适当的方法来哈希密码。
$pw = "12341234";
$salt = 'randomchars';
$initial = sha1($pw);
$hashed = md5($salt . $initial);

还有其他需要考虑的事项吗?欢迎留下你的想法!

(这段文字已经是中文了,没有翻译任务)

你正在结合两个哈希(sha1和md5)。这从来不是一个好主意。 - Paul
5个回答

2

我认为,如果一个库“可以集成到WordPress 2.5+中”,那么它很可能是一个稳定、安全的库。 - Michael Jasper
没什么,它已经集成到Drupal 7中了。 - chx

2

我认为你可能没有意识到一个事实,那就是你加密密码的方式并不会影响到密码被暴力破解攻击(例如攻击者尝试提供成千上万个可能的密码)的可能性。这种做法只是让密码在数据库中的值被泄露时变得更安全。


1
然而,算法可以影响暴力攻击的执行速度。 - Corbin
1
如果某人拥有数据库的副本,并试图使用暴力破解攻击一种或多种密码,哈希算法运行所需的时间越长,破解一种或多种密码所需的时间也就越长。是的,如果某人正在尝试通过Web表单进行暴力破解,算法在所需时间方面并不会有太大关系(无论从百分比上来看),然而,“哈希密码的方式不会影响通过暴力破解攻击破解密码的可能性”几乎可以说是错误的,因为它涉及到“可能性”的几乎所有解释。 - Corbin
1
我相信我们在用不同的术语争论同一件事情。实际上,在你之前的评论中,直接反对了你回答中开头句子的有效性。(严格来说,这个评论的真实性取决于“可能性”的定义。)你首先断言所使用的算法不会影响暴力攻击的可行性。然后,在你之前的帖子中,你说如果选择一个弱算法,暴力攻击可以非常快速地完成。到底是哪种情况呢? - Corbin
1
如果某个算法的运行时间延长了10毫秒(这对于散列1个密码来说是巨大的时间),那么每个Web请求都会延长10毫秒。总结一下,算法的时间确实也会影响Web的性能。不冒犯任何人,但是这个评论串正在演变成术语差异和误解的胡言乱语。我最初争辩的重点是所选算法会影响暴力攻击所需的时间。我仍然对此持有异议。 - Corbin
1
“我不认为算法生成哈希所用的时间和破解哈希所需的时间之间存在相关性”是明显错误的。请从数学角度考虑这个问题。如果算法1的每次运行需要10秒,而算法2的每次运行只需要1毫秒,则算法1的10次尝试可能需要更少的尝试次数,但仍需要比算法2更长的时间才能找到碰撞。 - Corbin
显示剩余8条评论

1

对于暴力攻击,您可以使用谷歌的captcha

而对于代码密码,您可以先使用md5,然后再使用sha1,因为md5生成32个字符数据,sha1生成64个字符数据。 :)


0

在编程中,没有必要重新发明轮子,因为已经有一个crypt函数存在。

// generate MD5-hashed password with salt
$password = crypt('mypassword');
// password contains string(34) "$1$bkZO1nIl$y5bzPPwByq.9tYEb64k4e0"

在手册中查看不同类型的哈希值示例,包括MD5和SHA256:http://php.net/manual/en/function.crypt.php

如果这还不够,还有其他选择:

请记住,如果有人能够接触到您的数据库,那么他破解用户密码的能力将是您面临的最小问题。


0

你的代码片段看起来很安全。你想要防止彩虹表攻击,所以双重加密是一个好主意。即使生成MD5哈希值列表的计算能力巨大,但添加盐仍然可以保护免受此类攻击。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接