Python - base64 - 比较用户输入与存储的PIN

时间:2016-10-04 10:44:49

标签: python base64

检查输入的引脚(check_pin)==正确的引脚(引脚)

时,我遇到了问题

check_pin和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()

1 个答案:

答案 0 :(得分:0)

根据您从文件中读取的方式,请注意linecache.getline也将读取行尾的换行符。因此,pin的内容实际上是"gb'MTIzNA=='\n",并且不等于pin_check的base64编码值。

事实上,在您的示例输出中,您在第三行和第五行之间有一个额外的换行符(因为第二行,从代码判断,实际上是编码的用户输入引脚)。

您可能想要做的是

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

就是说,剥去你刚读过的那条线。