密码哈希程序

时间:2011-04-05 08:00:55

标签: python hash

我需要创建一个程序,允许用户输入一个密码,而不会显示密码实际是什么。这里有一些更详细的信息:

我需要在程序内存储一个用户应该事先知道的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 个答案:

答案 0 :(得分:1)

也许字典是一种很好的方法。我想让你开始,但请阅读这两个。

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

一般的python教程: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

答案 1 :(得分:1)

您需要使用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!")