2016-01-18 1 views
-3

я написал ниже сценарий:Подсчет количества символов хранится неправильно для каждого неверного пароля вошел

numString = [] 
count = 0 
while(True): 
    numInput=raw_input("Please enter your password\n") 
    count = count + 1 
    if numInput!="rusty": 
     numString.append(numInput) 

    else: 
     break 

def write_textfile(filename): 
    ofile = open('wrongpasswords.txt','w') 
    ofile.write("\nIncorrect password 1:" + numString[0]) 
    ofile.write("\nIncorrect password 2:" + numString[1]) 
    ofile.write("\nIncorrect password 3:" + numString[2]) 
    ofile.write("\nCorrect password entered on " + str(count)+"th entry") 
    ofile = open('wrongpasswords.txt', 'r') 
    for line in ofile: 
      print line 
    ofile.close() 

ofile = open('wrongpasswords.txt', 'r') 
write_textfile(ofile) 

напечатать следующее

Incorrect password 1: rusty123 
Incorrect password 2: Rusty 
Incorrect password 3: rustless 
Correct password entered on 4th entry. 

Я хочу, чтобы написать тот, который будет печатать следующее:

Incorrect password 1: rusty123 , wrong by 3 characters. 
Incorrect password 2: Rusty , wrong by 1 characters. 
Incorrect password 3: rustless , wrong by 4 characters. 
Correct password entered on 4th entry. 

Я попытался использовать difflib.

+2

Выключите Caps Lock, Shouty. «Stuck» не помогает. – duffymo

+3

1. Никогда не кодируйте пароли в коде, 2. Никогда не указывайте, почему пароль неверен. С сообщением «wrong by n characters» я могу взломать ваш пароль в попытках * b, где a - количество возможных символов в каждом месте (например, 255) и b максимальная длина. – Bathsheba

+0

Фактически (a + 1) * b, что позволяет совершить резкое завершение. – Bathsheba

ответ

0

Что вам нужно, это Hamming distance.

def Hamming(a, b): 
    K=len(a) 

    # Hamming distance is only for pieces of data 
    # that are of equal length 
    if K!=len(b): 
     return -1 

    cnt=0 
    for x in range(K): 
     if a[x]!=b[x]: cnt+=1 

    # if the strings are equal, returns zero, 
    # number of non-equal characters otherwise 
    return cnt 

Используйте его в вашем коде, как это:

correct="rusty" 

ofile.write("\nIncorrect password 1: {}, {} characters are incorrect".format(numString[0], Hamming(numString[0], correct))) 
+0

ОК спасибо, работая над ним. – Sine

Смежные вопросы