无法使hash()函数在python 3.2.2中工作

时间:2011-12-10 20:07:05

标签: python hash python-idle

我对此代码有疑问:

print('insert password below to get a hash')
pass = int(input('Input passowrd> ')

hash(pass)
input()

我尝试运行时遇到错误,我在python shell中尝试help(hash),阅读文档,尽可能使用google搜索,但我无法使其工作: - /

有什么问题?

4 个答案:

答案 0 :(得分:3)

我认为你有两个问题。


首先,传递通常不是整数,因此您对int的调用很可能会引发异常。

你可能想要这个:

pass = input('Input password> ')

其次,hash函数为对象返回hash code以进行快速比较。它不是cryptographic hash function。考虑使用类似常用的MD5算法或(最好)更安全的东西,例如SHA-2算法系列。

您可以使用hashlib生成加密安全的哈希值。例如:

>>> import hashlib    
>>> hashlib.md5('admin'.encode('utf-8')).hexdigest()
'21232f297a57a5a743894a0e4a801fc3'
>>> hashlib.sha256('admin'.encode('utf-8')).hexdigest()
'8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918'

根据您的需要,您可能还需要考虑使用salt来进一步保护密码。

答案 1 :(得分:3)

您的代码是有效的,但它可能不是您所期望的(整数的散列只是整数本身)。试试这个:

print('insert password below to get a hash')
pass_str = input('Input password: ')
h = hash(pass_str)

此外,如果您要存储密码的哈希值并希望它是安全的,请务必使用加密强哈希,例如 hashlib module 中的哈希:

>>> pass_str = 'the phrase that pays'
>>> hashlib.sha256(pass_str.encode()).hexdigest()
'a91ba2a03eb9772b114e6db5c5a114d8a9b3ba419a64cdde9606a9151c8a352e'

答案 2 :(得分:2)

pass是一个声明,你不能在Python中使用该名称的变量。

>>> pass = 1
SyntaxError: invalid syntax
>>> 

答案 3 :(得分:0)

将来,发布您收到的错误会有所帮助。我敢打赌它是ValueError抱怨密码无法转换为int,这是非常正确的。

首先转换为整数是没有意义的; hash适用于字符串:

print('Input password below to get a hash:')
pass = input('Input password> ')
print(hash(pass))
input()