散列消息为不同的值提供相同的散列

时间:2016-10-22 02:30:16

标签: python-3.x hash cryptography

我正在尝试编写一个代码,用于从3个随机生成的数字(x1,x2,x3)计算1000个SHA256哈希值 理想情况下,它应该在1到1000的循环中,我需要的是将值存储在列表或数组中的某个位置,然后再进行分析。 当我运行下面的代码时,即使随机数正在改变时间,print(digest.finalize())总是返回相同的哈希值

import random
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
while i<1000:
        digest = hashes.Hash(hashes.SHA256(), backend=default_backend())
        x1=random.randrange(2,256)
        x2=random.randrange(2,256)
        x3=random.randrange(2,256)
        print("x1,x2,x3 are ",x1,x2,x3)
        digest.update(b'x1')
        digest.update(b'x2')
        digest.update(b'x3')
        print(digest.finalize())
        del digest
        #print(digest.finalize())

        i=i+1

1 个答案:

答案 0 :(得分:1)

考虑digest.update(x1)digest.update(b'x1')之间的区别。后者只是将字符b'x'和b'1'提供给更新方法,并且与变量x1没有任何关系。

中散列变量x1的值
import random
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
digest = hashes.Hash(hashes.SHA256(), backend=default_backend())
x1=random.randrange(2,256)

你需要像

这样的东西
digest.update(x1)

但是,这仍然是不正确的,因为update()需要一个字节对象作为其参数,而不是一个整数。因此,正确的呼叫类似于

digest.update(x1.to_bytes(1, 'big')) 

请仔细阅读to_bytes int方法的文档。