我需要寫打開兩個文件和功能,如果一定比較真實結果寫入第三個文件:蟒蛇通過迭代和寫入文件
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