首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用PHP破解密码?

问用PHP破解密码?
EN

Security用户
提问于 2019-12-13 02:31:41
回答 2查看 3.9K关注 0票数 6

这是破解PHP密码的正确方法吗?

  • 我使用password_hash函数散列密码(PHP7.3版)。
  • 然后,我使用Python脚本创建了一个单词列表。它的大小大约是1GB。
  • 然后,我创建了一个PHP脚本来读取单词列表,并使用password_hash检查密码。
  • 最后,我使用终端执行了PHP脚本。

它工作正常,但破解密码花费了太多时间。作为一个学生,我喜欢写我自己的脚本和工具。有没有人知道如何以更好的性能和效率来做到这一点?

我还搜索了使用集群和GPU破解密码的方法,我不确定这是否有帮助。

EN

回答 2

Security用户

回答已采纳

发布于 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文件。以下是每个列表中有多少个密码:

  1. 所有4位密码:72^4 = ~27,000,000组合
  2. 所有6位密码:72^6 = ~74,000,000,000组合
  3. 所有8位密码:72^8 = ~700 trillion组合
  4. 一个1G文件:~100,000,000密码(假设每个密码平均10字节)

散列时间

我们知道我们想要散列多少密码和哈希率(750/s),所以现在简单的数学告诉我们,使用顶级的散列算法遍历这些列表需要多长时间:

  1. 所有4位密码:~10小时
  2. 所有6个数字密码:~6年
  3. 所有8位密码:~30000年
  4. 1GB文件:~1.5天

对于更实际的数字,我使用自己机器的一个CPU粗略估计了哈希率,每秒管理大约10个散列。使用这个哈希率:

  1. 所有4位密码:~30天
  2. 所有6位密码:~450岁
  3. 所有8位密码:~200万年
  4. 1GB文件:~115天

摘要

给自己买半打高质量的GPU,假设你使用默认的成本因素,你可以在一天内破解所有可能的4位密码。试着做6个数字的密码,它仍然需要你数年。您的1GB文件填充密码是很难猜测的时间,但实际上,这仍然需要几天时间运行,即使有一堆GPU帮助您。

票数 8
EN

Security用户

发布于 2019-12-14 10:14:28

我真的很喜欢康纳·曼康的回答。我要补充的唯一一点是,你可以通过首先检查最有可能的密码来提高效率,也许可以使用先前泄露的密码列表或者你知道的目标(例如)。当地运动队)。

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

https://security.stackexchange.com/questions/222699

复制
相关文章

相似问题

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