为什么每次在hashlib中调用hexdigest()时都会得到不同的哈希值?

时间:2016-06-20 02:52:02

标签: python hash

我想在python中为同一个字符串设置一个唯一的哈希值。我使用以下代码获取哈希:

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

我在这里错过了什么?

4 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:4)

当您致电update("my_url")时,您将concatenating该字符串添加到哈希输入中。

  

现在可以使用update()方法使用任意字符串提供此对象。在任何时候你都可以使用digest()或hexdigest()方法向它索取到目前为止连接到它的字符串串联的摘要。

每次需要新哈希时,都需要创建一个新的sha1对象。

答案 2 :(得分:1)

不要多次拨打import base64 from PIL import Image import cv2 from StringIO import StringIO import numpy as np def readb64(base64_string): sbuf = StringIO() sbuf.write(base64.b64decode(base64_string)) pimg = Image.open(sbuf) return cv2.cvtColor(np.array(pimg), cv2.COLOR_RGB2BGR) cvimg = readb64('R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7') cv2.imshow(cvimg) ,例如:

update

答案 3 :(得分:0)

最安全的方式:

import hashlib    
print(hashlib.sha1(str("my_url").encode('utf-8')).hexdigest())