2016-10-04 28 views
0
我檢查當將具有問題

如果輸入引腳(check_pin)==正確引腳(引腳)Python的 - 的base64 - 比較用戶輸入VS存儲的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: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'如'銷= 「gb'MTIzNA =='」'然後行'如果 「G」 + STR(base64.b64encode(字節(pin_check, 'UTF-8')))= =銷:打印( 'OK')'實際打印''ok''。這將有助於看你怎麼聲明'pin' –

回答

0

考慮如何從文件中讀取,注意linecache.getline也將在該行的閱讀正文之後的換行符。所以pin的內容實際上是"gb'MTIzNA=='\n"這不是等於爲pin_check base64編碼值。

在您的樣本輸出你有第三和第五行之間的額外的換行符的事實表明只是(作爲第二線,從該編碼判斷,實際上是編碼的用戶輸入PIN)。

你可能想要做的是

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

就是剝去你剛纔讀行。

+0

我怎樣才能讀取,而行「\ n」 –

+0

@MathewWright我編輯我的答案來回答您的評論。 –