我正在尝试编写一个代码,用于从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
答案 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
方法的文档。