SHA512 Python为同一个字符串生成了不同的结果

时间:2012-11-24 03:59:21

标签: python sha512

我有一个id列表,我想用字符串'text'追加。 我想检查是否有任何ID(在附加'text'字符串后)等于字符串'text_compare'。

奇怪的是,散列之前的字符串是相同的,但是在进行散列之后,散列似乎没有产生相同的结果。以下是我的代码。您可以在Python命令行上测试它。

import hashlib
h = hashlib.sha512()

text = 'beruk makye'
text_compare = '3beruk makye'
text_compare_hash = h.update(text_compare)
text_compare_hash = h.hexdigest()

ids = [1,2,3]
texts = []
bool_text = []
bool_text_hash = []

for id in ids:
    texts.append(str(id) + text)

for t in texts:
    if t == text_compare:
        bool_text.append(True)
    else:
        bool_text.append(False)

for t in texts:
    h.update(t)
    t_hash = str(h.hexdigest())
    if t_hash == text_compare_hash:
        bool_text_hash.append(True)
    else:
        bool_text_hash.append(False)

print ids
# [1, 2, 3]
print texts
# ['1beruk makye', '2beruk makye', '3beruk makye']
print bool_text
# [False, False, True]
print bool_text_hash
# [False, False, False]

3 个答案:

答案 0 :(得分:5)

您的问题是您正在重新使用相同的哈希对象,因此您只需继续添加它。每次你应该实例化一个新的sha512()对象。以下代码可以正常工作。

import hashlib
h = hashlib.sha512()

text = 'beruk makye'
text_compare = '3beruk makye'
text_compare_hash = h.update(text_compare)
text_compare_hash = h.hexdigest()

ids = [1,2,3]
texts = []
bool_text = []
bool_text_hash = []

for id in ids:
    texts.append(str(id) + text)

for i in texts:
    hash = hashlib.sha512(i).hexdigest()
    print i, hash, hash == text_compare_hash

答案 1 :(得分:1)

此处的问题是h已经创建,之后您通过调用update()方法添加字符串。

要解决这个问题,你可以举例如。将h重新初始化为新的sha512哈希:

# ...
for t in texts:
    h = hashlib.sha512()  # <--- here
    h.update(t)
    t_hash = str(h.hexdigest())
    if t_hash == text_compare_hash:
        bool_text_hash.append(True)
    else:
        bool_text_hash.append(False)
# ...

答案 2 :(得分:0)

你错过了这一行:     h = hashlib.sha512()

在h.update(t)之前

如果查看python文档(http://docs.python.org/2/library/hashlib.html) 它解释了更新将返回到目前为止给予hashlib的所有字符串的摘要。 因此,在您的情况下,您正在散列的字符串是:

loop1:'1beruk makye'

loop2:'1beruk makye2beruk makye'

loop3:'1beruk makye2beruk makye3beruk makye'