Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 密码散列程序_Python_Hash - Fatal编程技术网

Python 密码散列程序

Python 密码散列程序,python,hash,Python,Hash,我需要创建一个程序,允许用户输入pin码,而不透露pin码实际上是什么。下面是一些更详细的信息: 我将需要在程序中存储一个PIN码,用户应该事先知道。然后我需要生成一个由10个随机数组成的字符串,范围是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码,而不透露pin码实际上是什么。下面是一些更详细的信息:

我将需要在程序中存储一个PIN码,用户应该事先知道。然后我需要生成一个由10个随机数组成的字符串,范围是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
我甚至不知道如何启动这个代码。任何帮助都将不胜感激。谢谢大家!

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


以及python教程:

这将设置您上面描述的映射。我不知道您是如何存储pin的,但您希望将用户输入和正确pin的
pinToCode
映射输入到哈希函数中,并希望它们匹配

不要简单地使用名为
hash
的函数,它没有加密值,只是用于数据结构实现

您可以从这里开始使用哈希函数
http://docs.python.org/library/md5.html

您需要使用dict将数字映射为1到3之间的随机数,包括:

from random import randint
dmap = {str(x): str(randint(1, 3)) for x in range(10)}  # 2.7+
您的问题似乎表明,重要的是用户不应通过键入PIN来显示其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!")

“Hello World”和输入教程应该是一个很好的起点。然后找出如何导入库,抓住md5或sha并简单地调用它们。请注意,箭头显示的是
02
。事实上,
0-->2
是正确的,但不是
0您是否考虑过,由于只有81个4位三进制数字的组合,因此通过每次键入1111来猜测正确密码的几率是1/20,需要4次尝试?(第一次失败加上警告后的三次尝试,对吗?)如果它能保护任何非常重要的东西,那就有点低了。是的,我已经考虑过了。这是课堂作业。我为此感到压力很大,不知道从哪里开始。如果有人能写一段代码,我就可以从中学习。再次感谢您的帮助。我真的很感激。在
NUM
中使用3个以上的数字,不应该让事情变得更困难。只需使用全部10位数字
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!")