我对此代码有疑问:
print('insert password below to get a hash')
pass = int(input('Input passowrd> ')
hash(pass)
input()
我尝试运行时遇到错误,我在python shell中尝试help(hash)
,阅读文档,尽可能使用google搜索,但我无法使其工作: - /
有什么问题?
答案 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()