【发布时间】:2016-02-03 04:06:08
【问题描述】:
抱歉,如果这是一个非常简单的问题...我对 Python 完全陌生,并且正在学习。
一篇旧帖子 (Find all combinations (upper and lower and symbols) of a word in python) 展示了一种将输入单词的多种排列方式提供给 leet-speak 的方法(谢谢 Moose!)。代码运行得很漂亮,但呈现的代码只允许输入一个单词;在这种情况下:密码。
我想使用一个文本文件,每行一个单词,作为上面链接中显示的代码 sn-p 的输入,并将结果保存到一个新的文本文件中。
我认为这很简单:以只读方式打开输入文件,以写入方式打开输出文件,将 infile.readlines() 的值替换为 def 并将结果写入输出文件。冲洗并重复。然而,尽管尝试了几种不同的方法和语法,我还是无法让它发挥作用。
我修改 moose 代码的拙劣尝试如下所示:
#!/usr/bin/python
# -*- coding: utf-8 -*-
from itertools import product
def getAllCombinations(password):
leet = ["Aa@","Bb","Cc", "Dd","Ee","Ff","Gg","Hh","Ii","Jj","Kk",
"Ll","Mm","Nn","Oo0","Pp","Qq","Rr","Ss5","Tt","Uu","Vv",
"Ww","Xx","Yy","Zz"]
getPlaces = lambda password: [leet[ord(el.upper()) - 65] for el in password]
for letters in product(*getPlaces(password)):
yield "".join(letters)
with open("wordlist_in.txt", "r") as infile, open("wordlist_out.txt", "w") as outfile:
data = infile.readlines()
for el in getAllCombinations(data): <<<Pretty sure this is where I go wrong
outfile.write(el+'\n')
如何将文件每一行中包含的字符串作为 getAllCombinations 的输入?
提前感谢您的帮助!
【问题讨论】:
-
您的 wordlist_in.txt 文件是什么样的?
-
你的最终目标是什么?为什么需要输出所有的组合?也许有更好的方法来实现这一目标。
-
我正在使用输出来创建大量的词表,这些词表又被用作哈希破解的来源。我尽可能使用规则来充分利用 GPGPU 性能,但有时您只需要一些好的单词列表作为来源,尤其是对于组合攻击。