【问题标题】:What is an efficient way to write password cracking algorithm (python)什么是编写密码破解算法的有效方法(python)
【发布时间】:2010-05-24 08:37:15
【问题描述】:

这个问题可能比较简单,但是给了我两个文本文件。一个文本文件包含通过 python 中的 crypt.crypt 加密的所有加密密码。另一个列表包含超过 400k+ 的普通字典单词。

任务是给定 3 个不同的函数,它们将字符串从它们的正常大小写转换为所有不同的大写排列,将字母转换为数字(如果看起来相似,例如 G -> 6,B -> 8),以及反转一个字符串。问题是,给定密码文件中的 10 - 20 个加密密码,在 python 中获得最快运行的解决方案以在单词文件中的字典单词上运行这些函数的最有效方法是什么?假设所有这些单词,无论以何种方式转换,都将加密为密码文件中的密码。

这是检查给定字符串在加密时是否与传入的加密密码相同的函数:

def check_pass(plaintext,encrypted):
 crypted_pass = crypt.crypt(plaintext,encrypted)
 if crypted_pass == encrypted:
  return True
 else:
  return False

提前致谢。

【问题讨论】:

  • return crypted_pass == encrypted
  • return encrypted == crypt.crypt(plaintext,encrypted)

标签: python algorithm


【解决方案1】:

在不了解底层哈希算法的详细信息以及该算法可能存在的弱点的情况下,您所能做的就是进行暴力攻击,尝试对密码列表中的单词进行所有可能的转换。

加速这种蛮力攻击的唯一方法是获得更强大的硬件并拆分任务并并行运行破解程序。

【讨论】:

  • 作为一个轻微的肉空间优化,在开始更改之前尝试未更改的单词可能会成功。人们倾向于使用真实的单词,并且不太可能使用包括数字等的排列。当然,如果这是家庭作业,YMMV。 ;)
  • 是的@JosephMastey,但这看起来像家庭作业,在这种情况下,您的假设将不成立
  • @inspectorG4dget 当然可以,但让我们假设教授提出了一个相当现实的数据集,只是为了让我对自己的 CS 学位感觉更好。
  • 谢谢你们的帮助,伙计们。我能够成功破解 90% 的密码,但其他密码只花了超过 10 分钟,这是我们获得的最长时间。
  • @Luminance:超过10分钟需要多长时间?也许还有一些方法可以提高性能。也许你可以找一个分析器来检查。
【解决方案2】:

在我的慢速笔记本电脑上,crypt.crypt 大约需要 20 微秒:

$ python -mtimeit -s'import crypt' 'crypt.crypt("foobar", "zappa")'
10000 loops, best of 3: 21.8 usec per loop

所以,蛮力方法(真的是唯一明智的方法)“有点”可行。通过应用您的转换函数,您将获得(大致估计)每个字典单词大约 100 个转换单词(主要来自大写更改),因此,整个字典中有大约 4000 万个转换单词。每个 20 微秒,大约需要 800 秒,称为 15 分钟,用于尝试破解实际上不对应任何变体的密码之一;预计时间大约一半,以破解确实对应的密码。

因此,如果您有 10 个密码要破解,并且它们都对应于转换后的字典单词,那么您应该在一两个小时内完成。那样行吗?因为除了将这个令人尴尬的并行问题分发到尽可能多的节点和内核上之外,您无能为力(哦,而且,首先使用更快的机器——这可能会为您带来两倍的收益或附近)。

没有可以添加的深度优化技巧,因此一般逻辑将是三重嵌套循环:一级循环加密密码,一级循环字典中的单词,一级循环每一个的变体字典词。关于如何嵌套事物没有太大区别(为简单起见,变体上的循环必须位于单词的循环内)。我建议将“给我这个词的所有变体”封装为生成器(为了简单,而不是为了速度),否则尽量减少函数调用的次数(例如,没有理由使用 check_pass 函数,因为内联代码只是一样清晰,并且在显微镜下会更快)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    相关资源
    最近更新 更多