当前位置: 首页 > 知识库问答 >
问题:

SHA256给出了意外的结果

融烨华
2023-03-14

我试图使用hashlib对字节数组进行散列,但是我无法使散列与我期望的匹配(通过在线SHA256函数确认答案)。

我是这样做的:

hashedData = hashlib.sha256(input[0:32]).hexdigest()
print('hash = ', hashedData)

在执行哈希之前,我打印出输入数据的十六进制摘要:

print('input = ', input[0:32].hex())

我做错了什么?

共有2个答案

池砚文
2023-03-14

您需要为sha256提供编码输入。输入必须作为bytestring传递。使用encode()方法将其转换为bytestring格式。


hashed = hashlib.sha256("test".encode()).hexdigest()
print(hashed)

在您的情况下,请使用bytes()方法对字节数组进行编码:


hash_input=bytes(input)

结果:9f86d081884c7d659a2fea0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08

实际res来自:9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08

汪栋
2023-03-14

在您的代码中进行哈希处理的数据似乎是一个字节串,但是您在使用的任何在线工具上进行哈希处理的数据是您的. hex()结果,这是ASCII十六进制值。它们不是一回事。请参阅下面的比较,以重现您的两个结果:

from binascii import unhexlify
import hashlib

data1 = b'ff815ef617d058df5d16f96a73591e4d12ac358cc113a8c74d8f4ac5843dd921'
data2 = unhexlify(data1)
print(f'{data1=}\n{data2=}')
hashed1 = hashlib.sha256(data1).hexdigest()
hashed2 = hashlib.sha256(data2).hexdigest()
print(f'{hashed1=}\n{hashed2=}')

输出:

data1=b'ff815ef617d058df5d16f96a73591e4d12ac358cc113a8c74d8f4ac5843dd921'
data2=b'\xff\x81^\xf6\x17\xd0X\xdf]\x16\xf9jsY\x1eM\x12\xac5\x8c\xc1\x13\xa8\xc7M\x8fJ\xc5\x84=\xd9!'
hashed1='e417268832671b04efa73ba4093572975e084b8b33bfdcb4f9345093f80106ff'
hashed2='56e8d96c55150870ecc84c9a355de617993e21e29c9edcf3caa369b252fd2108'
 类似资料:
  • 我试图通过HTTP向服务器发送一个SHA256哈希字符串,在那里我想通过执行SHA256哈希并验证两个匹配来进行身份验证。出于测试目的,我使用相同的字符串,但是结果不匹配。这可能是我的base64_encode调用的默认编码方案吗?谢谢 在PHP中,我正在做: 我在做什么

  • 我正在解决的问题,我们给一个整数,我们必须返回10的最大幂,它小于或等于给定int n的值。我试图解决它,但运行时间不是预期的。 如果我将最后一个,语句替换为要获得正确答案,显示的值为0。此外,如果我尝试使用而不是,那么它也会显示0。 a间隙输出:如果n=100 with值为3。 使用值为0。 值为0。

  • 问题内容: 我不知道以下行为, 以上语句的输出如下: 假 str1 == str2是 为什么会这样呢?为什么输出不是这样的: str1 == str2是 str1 == str2是 问题答案: 的优先级高于。 所以你的代码: 将有效地 因此,您得到了。 在情况2 您已显式使用花括号与(是)进行比较,然后附加值。

  • 我有一系列字符串,格式如下:“动物||类型||区域||”。 在Java中,我试图拆分字符串,以便只显示第一部分。我在网上读到的所有信息都表明,要拆分字符串: 然而,当我拆分字符串时,它不仅基于“| |”除法拆分,而是拆分每个字母: 当我向拆分方法添加分隔符时,它会分隔字符串的第一部分,所以这是无效的。 如何拆分具有上述格式的字符串,以便我可以在数组中获得三个单词本身,而不仅仅是字母?

  • 我在Cplex中使用Python API来解决一个线性编程问题。使用Cplex时,我的结果如下: 但随后我将LP prolem保存为LP文件,并再次使用Cplex进行求解,结果与第一个略有不同: 下面是我的功能:

  • 问题内容: 我是java的新手,我的问题是,按下键后输出显示2个数字,但我不明白为什么。 这是代码: 问题答案: 尽管我不能重现该问题:(请参阅此处),但我的建议是也打印出字符(作为整数)。这将帮助您调试: