我有两个哈希,我需要比较。1来自一个API,另一个是我在内部计算的
我知道两个sha512可以比较使用
input1.digest() == input2.digest()这里的两个输入都是sha512 hash.My问题,因为我从API中获得了其中的一个,所以输入是string格式的,字符串没有digest:
* AttributeError:'str‘对象没有属性’摘要‘
我以为这会成功的:
if(calculated_hash != input_hash):
return False
return True如何为其中一个测试用例在内部生成哈希:
hash_val = sha512(parameters.encode('utf-8') + salt.encode('utf-8')).hexdigest()但由于哈希每次都是新的,这是行不通的。
在给定的情况下,如何比较这两个散列呢?
编辑:
由于输入中有一个动态时间戳,因此从params recived.But,生成的散列接收vc散列有差异,所以在比较hexdigest!:\时,我仍然得到的值为False!
发布于 2016-02-03 06:49:17
将input1和input2的确切值添加到问题中。
散列输出可能不同的唯一方法是,如果输入字符串不同,在我看来,您有一个参数,它的值在运行时每次都被错误地更改。如果我在你的鞋,我会检查一些时间戳或请求随机数等被输入到SHA计算,这是不同的每个请求。
编辑
正如OP提到的,这是输入字符串中存在动态时间戳的问题。至于使用bytes函数,字符串并不是真正需要的,比较直接的sha512(input).hexdigest应该有效。
发布于 2016-02-03 05:34:35
由于input1来自一个API,并且是一个str,所以需要将它输入实际的哈希函数。看一下文档(https://docs.python.org/3/library/hashlib.html),我们可以看到
...
h1 = hashlib.sha512(bytes(input1))
return h1.digest() == input2.digest()我们需要将input1从str转换为bytes,因为哈希函数需要一个类似字节的输入。但是,根据您的Python版本(2.X而不是3.X),这种转换是不必要的,因为默认情况下字符串是bytes。
发布于 2019-01-15 16:17:03
python中的秘密模块提供了一个函数“比较摘要”,该函数还可以用来比较两个“sha”家族散列函数的摘要和十六进制。下面是一个例子。
import hashlib, secrets
data_1 = b'Hello'
sha256_1 = hashlib.sha256(data_1).digest()
data_2 = b'Hello'
sha256_2 = hashlib.sha256(data_2).digest()
data_3 = b'However'
sha256_3 = hashlib.sha256(data_3).digest()
print(secrets.compare_digest(data_1, data_2)) #True
print(secrets.compare_digest(data_1, data_3)) #Falsehttps://stackoverflow.com/questions/35169093
复制相似问题