2016-06-20 13 views
3

我想在python中有相同字符串的唯一散列。我使用以下代碼獲取哈希:爲什麼每次我在hashlib中調用hexdigest()時都會得到不同的散列值?

import hashlib 
mysha1 = hashlib.sha1() 
mysha1.update("my_url") 
print mysha1.hexdigest() 
mysha1.update("my_url") 
print mysha1.hexdigest() # which is generating a different hash 

有沒有我在這裏錯過的東西?

+2

第二次,你得到的字符串'「my_urlmy_url」'的哈希值。現在閱讀答案;-) –

回答

1

只是不叫一次update多,例如:

>>> import hashlib 
>>> mysha1 = hashlib.sha1() 
>>> mysha1.update("my_url") 
>>> mysha1.hexdigest() 
'ebde90b9f0c047ff9f86bec3b71afe5d00594030' 
>>> mysha1.hexdigest() 
'ebde90b9f0c047ff9f86bec3b71afe5d00594030' 
5

update()函數提供要串聯的字符串。

https://docs.python.org/2/library/hashlib.html

>>> import hashlib 
>>> mysha1 = hashlib.sha1() 
>>> mysha1.update("my_url") 
>>> print mysha1.hexdigest() 
ebde90b9f0c047ff9f86bec3b71afe5d00594030 
>>> mysha1.update("my_url") 
>>> print mysha1.hexdigest() 
efa6ba48cedd0da886a553ad0e7c131ec79b452e 
>>> 
>>> 
>>> sha = hashlib.sha1() 
>>> sha.update("my_urlmy_url") 
>>> print sha.hexdigest() 
efa6ba48cedd0da886a553ad0e7c131ec79b452e 
3

當你調用update("my_url"),你concatenating該字符串的散列輸入。

您現在可以使用update()方法爲此對象提供任意字符串。在任何時候,您都可以使用digest()或者hexdigest()方法向它提供給它的串聯摘要摘要。

每次需要新散列時,都需要新建一個對象sha1

相關問題