2014-12-17 2 views
2

Я новичок в программировании, и мне интересно, возможно ли это. Я пытаюсь создать скрипт, защищенный паролем, где пароль вводится один раз, а затем требуется для выполнения сценария при следующем открытии скрипта. Я храню и шифрую пароль в файле, а затем проверяю, существует ли файл при следующем открытии скрипта. Проблема, с которой я столкнулся, - проверить, совпадают ли пароли, поскольку исходный пароль находится в функции как локальная переменная.local vs global variables Python

def createFile(): 
    pw = input('Enter Password: ') 
    pw2 = input('ReType Password: ') 
    if pw == pw2:   
     newPw = encrypt(pw, 10) #encodes the string with a key in a seperate encrypt function 
     pwFile = open('PW.txt', 'a') 
     pwFile.write(newPw) 
     pwFile.close() 
    else: 
     print('The passwords do not match') 
     createFile() 


if os.path.isfile('PW.txt'): 
    print('File exists') 
    pwCheck = input('What is the password? ') 
    #I can not check pwCheck == pw since pw is a local var. 

    #progression of script here 
else: 
    createFile() 

Я знаю, что считается, что для создания локальной переменной глобально. Есть ли способ реструктурировать то, что я до сих пор делал для этой работы? Поскольку я написал это, я думаю, что я, возможно, придумал возможное решение, но у меня нет времени проверить его сейчас. Я запускаю ту же функцию шифрования с тем же ключом для pwCheck и затем проверяю, является ли она == первой строке PW.txt? Это правильно и/или есть другие решения?

спасибо.

Использование Windows, Python 3.4

+4

Вы должны прочитать существующий пароль из файла, расшифровать его, и проверить его на 'pwCheck' – Claudiu

+2

Обратите внимание, что разумнее хранить * хэш * пароля, а затем сравнить хэш пользовательский ввод того, что находится в файле. – jonrsharpe

ответ

1

Вместо «шифровать», возможно использовать 1-полосная хэш .. Затем вы можете хеширования впоследствии введенный пароль и проверить его в сравнении с хэш хранится в файле ... что-то вроде:

def createFile(): 
    pw = input('Enter Password: ') 
    pw2 = input('ReType Password: ') 
    if pw == pw2:   
     newPw = sha.new(pw).digest 
     pwFile = open('PW.txt', 'a') 
     pwFile.write(newPw) 
     pwFile.close() 
    else: 
     print('The passwords do not match') 
     createFile() 


if os.path.isfile('PW.txt'): 
    print('File exists') 
    pwCheck = input('What is the password? ') 
    previous = open('PW.txt', 'r') 
    prevPass = previous.read() 
    hashed = sha.new(pwCheck).digest() 
    if (hashed==prevPass): 
     #progression of script here 
else: 
    createFile() 
1

Я действительно надеюсь, что это просто упражнение, потому что если вы заботитесь о безопасности, вы должны использовать другой механизм аутентификации для доступа ворота. Наиболее очевидно, разрешения unix и sudo для доступа к воротам.

Предполагая, что это упражнение, просто есть функция, которая проверяет ввод файла. Что-то вроде:

def doAuth(): 
    isAuthed = getPassInput() == getPassFromFile() 
    if isAuthed: 
     return True 
    else: 
     raise HellNoException("Passwords differ")