首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >比较在python中作为输入传递的2个sha512哈希

比较在python中作为输入传递的2个sha512哈希
EN

Stack Overflow用户
提问于 2016-02-03 05:22:40
回答 6查看 4.5K关注 0票数 2

我有两个哈希,我需要比较。1来自一个API,另一个是我在内部计算的

我知道两个sha512可以比较使用

代码语言:javascript
运行
复制
input1.digest() == input2.digest()

这里的两个输入都是sha512 hash.My问题,因为我从API中获得了其中的一个,所以输入是string格式的,字符串没有digest

* AttributeError:'str‘对象没有属性’摘要‘

我以为这会成功的:

代码语言:javascript
运行
复制
if(calculated_hash != input_hash):
    return False
return True

如何为其中一个测试用例在内部生成哈希:

代码语言:javascript
运行
复制
hash_val = sha512(parameters.encode('utf-8') + salt.encode('utf-8')).hexdigest()

但由于哈希每次都是新的,这是行不通的。

在给定的情况下,如何比较这两个散列呢?

编辑:

由于输入中有一个动态时间戳,因此从params recived.But,生成的散列接收vc散列有差异,所以在比较hexdigest!:\时,我仍然得到的值为False!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2016-02-03 06:49:17

input1input2的确切值添加到问题中。

散列输出可能不同的唯一方法是,如果输入字符串不同,在我看来,您有一个参数,它的值在运行时每次都被错误地更改。如果我在你的鞋,我会检查一些时间戳或请求随机数等被输入到SHA计算,这是不同的每个请求。

编辑

正如OP提到的,这是输入字符串中存在动态时间戳的问题。至于使用bytes函数,字符串并不是真正需要的,比较直接的sha512(input).hexdigest应该有效。

票数 1
EN

Stack Overflow用户

发布于 2016-02-03 05:34:35

由于input1来自一个API,并且是一个str,所以需要将它输入实际的哈希函数。看一下文档(https://docs.python.org/3/library/hashlib.html),我们可以看到

代码语言:javascript
运行
复制
...
h1 = hashlib.sha512(bytes(input1))
return h1.digest() == input2.digest()

我们需要将input1str转换为bytes,因为哈希函数需要一个类似字节的输入。但是,根据您的Python版本(2.X而不是3.X),这种转换是不必要的,因为默认情况下字符串是bytes

票数 2
EN

Stack Overflow用户

发布于 2019-01-15 16:17:03

python中的秘密模块提供了一个函数“比较摘要”,该函数还可以用来比较两个“sha”家族散列函数的摘要和十六进制。下面是一个例子。

代码语言:javascript
运行
复制
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)) #False
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35169093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档