暴力窮舉zip壓縮文件的密碼
阿新 • • 發佈:2017-05-28
src extract pre code margin import auto right dir
生成密碼的方式類似與時鐘,末尾遍歷完了第k位所有的字符,就讓第k位的前一位到下一位字符,第k位回到第0個字符。
對python還不太熟悉,效率比較低,但是能破解簡單的密碼。
import zipfile #密碼可能有的字符 testSetstr = "w.abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789#$%&‘()*+,-/:;<=>?@[\]^_`{|}~" # testSetstr = "0123456789" # testSetLen = len(testSetstr) #字符中長度maxtestLen = 5 #要猜的密碼的最大長度,時間耗時越久。 filename = ‘test.zip‘ #要解壓的文件名 filedir = ‘data/‘ #解壓路徑 def testPassword(teststr): r = zipfile.is_zipfile(filename) if r: fz = zipfile.ZipFile(filename,‘r‘) try: for file in fz.namelist(): fz.extract(file,filedir,pwd=str.encode(teststr)) print("密碼是",teststr) return True except: pass fz.close() else: print(‘不是zip文件,不能解壓‘) return True return False def test(n): alist = [0] * n while(alist[0] < testSetLen): testlist= [] for i in range(n): testlist.append(testSetstr[alist[i]]) teststr = "".join(testlist) if(testPassword(teststr)): return True alist[n - 1] += 1 for i in range(n-1,0,-1): if(alist[i] > testSetLen - 1): alist[i] = 0 alist[i - 1] += 1 if(i - 1 == 0): print("進度 ",100.0 * alist[i - 1] / testSetLen ,"%") else: break return False def main(): for i in range(maxtestLen): print("正在測試長度為",i + 1,"的密碼。") if(test(i + 1)): return main()
暴力窮舉zip壓縮文件的密碼