我需要写打开两个文件和功能,如果一定比较真实结果写入第三个文件:蟒蛇通过迭代和写入文件
def crack_pass_file(pass_filename,words_filename,out_filename):
f1=open(pass_filename)
f2=open(words_filename)
f3=open(out_filename,'w')
for line1 in f1:
x=make_dictionary(line1.split(":"))
password=x["password"]
name=x["account"]
for line2 in f2:
if (check_pass(line2.strip(),password)==True):
f3.write(name + "="+line2.strip())
文件F1是包含一个文件:
root:VgzdTLne0kfs6:0:0:Corema Latterll:/home/root:/bin/bash
checani:IqAFDoIjL2cDs:1:1:Pengpu Checani:/home/checani:/bin/bash
rkrakow:DLD3nJmCvt3pY:2:2:Rodentia Krakow:/home/rkrakow:/bin/bash
forkland:oWMVyy1FTdNL6:3:3:Forkland Maskins:/home/forkland:/bin/bash
obongo:O44lPEloqk5tY:4:4:Obongo Obwalden:/home/obongo:/bin/bash
pglenda:xboW5dHcsqvSQ:5:5:Pahsien Glenda:/home/pglenda:/bin/bash
madel:qEHvJXMkTSAZA:6:6:Madel Aporosa:/home/madel:/bin/bash
ssauks:Q3Kz1z7eAiwjg:7:7:Schober Sauks:/home/ssauks:/bin/bash
slajoie:wWTHgoE8SC8W6:8:8:Scheiner Lajoie:/home/slajoie:/bin/bash
tieton:RWORYLxRSSzMU:9:9:Lerwa Tieton:/home/tieton:/bin/bash
其中每行有一个用户,一个密码和一堆其他东西。对于第1行,root是用户,VgzdTLne0kfs6是加密的密码。每隔一行使用相同的格式。我需要做的是把加密后的口令,看看是否在其他文件中,F2密码,其中包含按字母顺序排列的话就像一个巨大的列表调用隐窝:
embordering
emborders
emboscata
embosk
embosked
embosking
将使该密码进入加密的密码。 我已经有了确实的功能和它的工作原理:
def check_pass(plain,enc):
s = enc[0:2]
x = crypt.crypt(plain, s)
if x==enc: return True
else: return False
也在这里是我用它来做一个字典出的文件1的每一行的makedictionary功能,也适用香港专业教育学院进行了测试:
def make_dictionary(s):
d={}
d["account"]=s[0]
d["shell"]=s[6]
d["UID"]=int(s[2])
d["GID"]=int(s[3])
d["GECOS"]=s[4]
d["directory"]=s[5]
d["password"]=s[1]
return d
当我测试它时,它会写入: root = stroam 到输出文件,这是第一个用户的解密密码,但没有写任何其他文件。这应该是结果:
root=stroam
checani=asarta
rkrakow=sinklike
obongo=yawnful
madel=aviatic
tieton=dagesh
pglenda=sngissa
forkland=relliarb
slajoie=mu2j1k
ssauks=EGaFeIHC
我发现所有的这些话(yawnful,AVIATIC等)的字样文件,但由于某种原因,他们没有被匹配。我也试过这样做: check_pass(“asarta”,“IqAFDoIjL2cDs”)和一些其他人,他们都返回true,所以我很困惑为什么他们更多没有打印到我的输出文件。
对不起,但我没有关注...你基本上想要2个文件逐行比较每个文件,并将匹配写入第三个文件? – Seekheart