这是破解PHP密码的正确方法吗?
password_hash函数散列密码(PHP7.3版)。password_hash检查密码。它工作正常,但破解密码花费了太多时间。作为一个学生,我喜欢写我自己的脚本和工具。有没有人知道如何以更好的性能和效率来做到这一点?
我还搜索了使用集群和GPU破解密码的方法,我不确定这是否有帮助。
发布于 2019-12-13 10:37:20
现代的散列方法( password_hash使用的)是有意缓慢的,使您无法完全完成您想要做的事情。大多数甚至可以抵抗GPU的并行化。
因此,如果您的目标是按照现代密码算法加速运行1GB密码列表,那么只有一个答案:如果不在一个庞大的计算集群上运行整个程序,就无法做到这一点。即便如此,一个足够长的密码实际上也是无法破解的。
你无法完成你想要做的事情。
“你不能这么做”是那种可以使用硬数字的语句!
要破解密码,我们首先需要知道测试散列的速度。我从一个真实的例子中借来自由,当时有人试图用带有4个GPU的破解平台破解阿什利麦迪逊数据转储中的密码。这是远远好于您的典型家庭用户将有访问的硬件。在这种情况下,bcrypt被配置为使用成本因子12 (又名4069轮哈希),而4 GPU钻机只能每秒管理156次哈希。对于较低的成本因素,哈希率迅速上升。PHP默认使用10,这将导致4倍的高哈希率。我们会聚在一起玩,假装我们设法达到750散列/秒。
接下来我们需要知道我们想破解多少密码。让我们举几个例子:所有可能的4个字符密码(数字,字母,10个特殊字符),所有可能的6个字符密码,所有可能的8个字符密码,或一个充满密码的1G文件。以下是每个列表中有多少个密码:
72^4 = ~27,000,000组合72^6 = ~74,000,000,000组合72^8 = ~700 trillion组合我们知道我们想要散列多少密码和哈希率(750/s),所以现在简单的数学告诉我们,使用顶级的散列算法遍历这些列表需要多长时间:
对于更实际的数字,我使用自己机器的一个CPU粗略估计了哈希率,每秒管理大约10个散列。使用这个哈希率:
给自己买半打高质量的GPU,假设你使用默认的成本因素,你可以在一天内破解所有可能的4位密码。试着做6个数字的密码,它仍然需要你数年。您的1GB文件填充密码是很难猜测的时间,但实际上,这仍然需要几天时间运行,即使有一堆GPU帮助您。
发布于 2019-12-14 10:14:28
我真的很喜欢康纳·曼康的回答。我要补充的唯一一点是,你可以通过首先检查最有可能的密码来提高效率,也许可以使用先前泄露的密码列表或者你知道的目标(例如)。当地运动队)。
https://security.stackexchange.com/questions/222699
复制相似问题