Программа хеширования пароля - PullRequest
1 голос
/ 05 апреля 2011

Мне нужно создать программу, которая позволит пользователю вводить номер пина, не раскрывая, какой на самом деле номер пина.Вот еще несколько подробностей:

Мне нужно будет хранить внутри программы PIN-код, который пользователь должен знать заранее.Затем мне нужно будет сгенерировать строку из десяти случайных чисел в диапазоне от 0 до 3. Когда программа запустится, она должна напечатать две строки, такие как

PIN:   0 1 2 3 4 5 6 7 8 9                    
       | | | | | | | | | |
       v v v v v v v v v v 
NUM:   2 2 3 1 1 1 3 2 3 2 

Если бы PIN-код пользователя был «7724», они набрали бы2231" .Программа проверит, действительно ли цифры 2231 действительно соответствуют 7724. Если это так, она должна приветствовать пользователя в программе (и выйти).Если нет, пользователь получает предупреждение и предоставляет три попытки.

Обратите внимание, что начальная цифра "2" означает, что первая цифра моего PIN-кода равна 0 или 1, или 7, или 9.

Я новичок в Python и использую 3.1. Я не уверен, какдаже начать этот код.Любая помощь будет принята с благодарностью.Спасибо!

Ответы [ 2 ]

1 голос
/ 05 апреля 2011

Вам потребуется использовать dict для сопоставления цифр случайному числу от 1 до 3 включительно:

from random import randint
dmap = {str(x): str(randint(1, 3)) for x in range(10)}  # 2.7+

Ваш вопрос, по-видимому, указывает на то, что пользователь не должен раскрыватьего PIN-код, набрав его, и то, как вы храните его в программе, не имеет значения.Поэтому я предполагаю, что вы сохранили его в виде простой строки pw = "7724".

Для ввода карты:

print(" ".join(sorted(dmap.keys())))
print(" ".join("|" for x in dmap.keys()))
print(" ".join("v" for x in dmap.keys()))
print(" ".join(map[x] for x in sorted(dmap.keys())))

Наконец, чтобы проверить:

correct = [dmap[x] for x in pw]
for i in range(4):
    if [dmap[x] for x in raw_input("Code:  ")] == correct:
        break
    print("Try again")
else:
    # Only run if for loop did not break
    print("Sorry, no more tries!")
    import sys
    sys.exit()
print("Correct!")
1 голос
/ 05 апреля 2011

Может быть, словарь был бы хорошим способом сделать это. Я пытаюсь начать, но, пожалуйста, прочитайте оба из них.

http://docs.python.org/library/random.html
http://docs.python.org/tutorial/datastructures.html#dictionaries

И учебник по питону в целом: http://docs.python.org/tutorial/index.html

import random
pinToCode = dict()
for i in range(10):
   pintoCode(i) = random.randint(0,9)

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

Не используйте функцию, просто называемую hash, она не имеет криптографического значения, она просто для реализации структуры данных.

здесь вы можете начать работу с хеш-функциями http://docs.python.org/library/crypto.html http://docs.python.org/library/md5.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...