2016-10-04 1 views
0

У меня возникают проблемы при проверке, если введенный PIN-код (check_pin) == правильный контактный (контактный)Python - base64 - сравнение пользовательский ввод против сохраненного PIN

тестовые выходы check_pin и пин-код одинаковы, но она не видит их как эквивалент (строка 4)

код:

pin_check = input("Please input your 4 digit PIN number: ") 
print("g"+str(base64.b64encode(bytes(pin_check, "utf-8")))) 
print(pin) 
    if "g"+str(base64.b64encode(bytes(pin_check, "utf-8"))) == pin: 
     y = 0 
    else: 
     v = v + 1 
     y = int(y) - 1 
     print("Incorrect PIN,",y,"attempts remaining.\n") 

Выходы:

Please input your 4 digit PIN number: 1234 [user input, correct pin[1234]] 
gb'MTIzNA==' [stored pin] 
gb'MTIzNA==' [user input pin] 

Incorrect PIN, 2 attempts remaining. [it should set y = 0, not print this line] 

Хранится штифт: Pin.txt состоит из нескольких строк: gb'MTIzNA ==»

import linecache 
    fo = open("Pin.txt", "r") 
    pin = linecache.getline('Pin.txt', int(card_no)) 
    print(pin) 
    fo.close() 
+0

Если я объявляю 'pin' как' pin = "gb'MTIzNA == '" ', тогда строка' if' g "+ str (base64.b64encode (bytes (pin_check, 'utf-8'))) = = pin: print ('ok') 'на самом деле печатает' 'ok''. Это поможет узнать, как вы объявляете 'pin' –

ответ

0

Учитывая то, как вы читаете из файла, обратите внимание, что linecache.getline также будет читать символ новой строки в конце строки. Таким образом, содержание pin на самом деле является "gb'MTIzNA=='\n", и это не соответствует значению base64 для pin_check.

Тот факт, что на вашем образце вы получаете дополнительную строку новой строки между третьей и пятой строкой, показывает, что (как вторая строка, судя по коду, на самом деле является введенным пользователем входным выводом).

Что вы можете сделать, это

pin = linecache.getline('Pin.txt', int(card_no)).strip() 

, который, раздеться линию, которую вы только что прочитали.

+0

Как я могу прочитать строку без« \ n » –

+0

@MathewWright Я отредактировал свой ответ, чтобы ответить на ваш комментарий. –