2011-12-10 52 views
0

我有這個代碼的問題:無法獲得哈希()函數在Python 3.2.2工作

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

hash(pass) 
input() 

我只是得到一個錯誤,當我嘗試運行此,我試過help(hash)在python shell中,閱讀文檔,儘可能地使用Google搜索,但是我無法使其正常工作: -/

問題是什麼?

+1

你應該告訴我們你得到了什麼錯誤。 – middus

+2

我愛如何沒有人提到'通過'是一個保留字(因此不是一個有效的標識符)。所以甚至突出它! – delnan

回答

3

我覺得你有兩個問題。


首先,pass- 通常不是整數,所以你要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以進一步保護密碼。

0

將來,這將有助於發佈您遇到的錯誤。我敢打賭這是一個ValueError,它抱怨說密碼不能轉換爲int,這是非常正確的。

首先轉換爲整數沒有意義; hash作品蠻好的字符串:

print('Input password below to get a hash:') 
pass = input('Input password> ') 
print(hash(pass)) 
input() 
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

pass是一個語句,您不能在Python中爲該名稱指定一個變量。

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