используя переменную с командой ZipFile.setpassword - PullRequest
0 голосов
/ 18 октября 2018

Я работаю над сценарием для моего класса, чтобы открыть защищенный паролем zip-файл.У меня есть список паролей, по которым нужно циклически проходить.

Я создал скрипт, который отлично выполняет эту функцию, когда я вручную ввожу пароль в поле пароля: ZipFile.setpassword (b'12345 ')

Но я хочу, чтобы вместо этого использовалась переменная passwordattempt, поскольку она циклически перебирает каждую запись в моем списке, как этот ZipFile.setpassword (b'passwordattempt '). Но когда я делаю это, она никогда не работает и не работает.похоже, что он использует пароль, присвоенный переменной.

Я вижу, что он корректно просматривает мой список, используя печать (passattempt)

#################################
## Create a temp list of pass  ##
## words from the allpass.txt  ##
## file                        ##
#################################

#Create a temp Library
passwordlib = []

#Open temp allpassword file to put into temp list
with open('allpass.txt', 'r+') as f:
    for line in f:
        line = line.rstrip("\n")
        #print(line)
        passwordlib.append(line)
f.close()
#End of temp list creation


#Attempt to open zip file using the list of passwords in passwordlib[]
for line in passwordlib:
        passattempt = line.strip('\n')
        try:
          zip_ref = zipfile.ZipFile("Resources/ZippedFiles/testzip.zip", 'r')
          print (passattempt) #Print to confirm passwords are cycling through
          zip_ref.setpassword(b'passattempt')            
          zip_ref.extractall("Resources/ZippedFiles/testout/")
        except:
          pass #if password is incorrect, ignore Runtime error and move to next password      
        zip_ref.close()

1 Ответ

0 голосов
/ 19 октября 2018

Да, просто используйте encode для преобразования string в bytes с использованием кодировки по умолчанию (utf-8).

import zipfile

with open('allpass.txt', 'r+') as f:
    passwordlib = f.readlines()

# Attempt to open zip file using the list of passwords in passwordlib[]
for line in passwordlib:
    passattempt = line.strip('\n')
    with zipfile.ZipFile("file.zip", 'r') as zf:
        print(passattempt)  # Print to confirm passwords are cycling through
        zf.setpassword(passattempt.encode())
        try:
            zf.extractall("Resources/ZippedFiles/testout/")
        except RuntimeError as e:
            if 'Bad password' not in str(e):
                raise
...