编写密码破解算法(python)的有效方法是什么

编写密码破解算法(python)的有效方法是什么,python,algorithm,Python,Algorithm,这个问题可能相对简单,但我有两个文本文件。一个文本文件包含在python中通过crypt.crypt加密的所有加密密码。另一个列表包含超过400k的普通词典单词 赋值是给定3个不同的函数,它们将字符串从其正常大小写转换为所有不同的大写排列,将字母转换为数字(如果它看起来相似,例如g->6,B->8),并反转字符串。问题是,给定密码文件中的10-20个加密密码,在python中获得运行最快的解决方案以在word文件中的字典word上运行这些函数的最有效方法是什么?所有这些单词,无论以何种方式转换,

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

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

下面是一个函数,用于检查给定字符串在加密时是否与传入的加密密码相同:

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

提前感谢。

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


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

在我的慢速笔记本电脑上,
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个密码要破解,而且它们都对应于一个经过转换的字典单词,你应该在一两个小时内破解。可以吗?因为除了将这个令人尴尬的并行问题分发到尽可能多的节点和核心上之外,你没有什么其他可以做的了(哦,而且,首先要使用一台速度更快的机器——这可能会为你购买大约两倍)


没有可以添加的深度优化技巧,因此一般的逻辑将是三层嵌套循环:一层循环覆盖加密密码,一层循环覆盖字典中的单词,一层循环覆盖每个字典单词的变体。关于嵌套方式没有太大区别(为了简单起见,变体上的循环必须在单词上的循环中)。我建议将“give me all variants of this word”封装为一个生成器(为了简单,而不是为了速度),并以其他方式最小化函数调用的数量(例如,没有理由使用该
check_pass
函数,因为内联代码同样清晰,从微观角度看会更快).

return-crypted\u-pass==encrypted
return-encrypted==crypt.crypt(明文,加密)
作为一种轻微的空间优化,在开始更改单词之前尝试不更改的单词可能会成功。人们倾向于使用实词,并且不太可能使用包括数字等的排列。当然,如果这是家庭作业,YMMV.)是的@JosephMastey,但这看起来像是家庭作业,在这种情况下,你的假设不会hold@inspectorG4dget当然有,但让我们假设教授提出了一个合理的现实数据集,只是为了让我对自己的CS学位感觉更好。谢谢你们的帮助,伙计们。我能够成功破解90%的密码,但其他密码只需要超过10分钟,这是我们获得的最大时间。@Luminance:需要多长时间超过10分钟?也许还有一些方法可以提高性能。也许你可以找一个探查器来检查一下。