如何使Python SHA256 digest与Java SHA256 digest匹配?

2024-10-03 17:24:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Java应用程序,它使用SHA-256散列生成令牌。我正在尝试将实现作为端到端测试套件的一部分移植到python3。你知道吗

我在Python实现中尝试了与Java实现中相同的步骤,但是得到了不同的hex编码结果。Java使用的是JDK11,我使用的是Python3.7。你知道吗

以下是Java实现:

import org.apache.commons.codec.binary.Hex;
import java.nio.charset.Charset;
import java.security.MessageDigest;
...

text = "{\"1\":\"" + num + "\"}";
MessageDigest mDigest = MessageDigest.getInstance("SHA-256");
mDigest.update(text.getBytes(UTF8_CHARSET));
mDigest.update(data1.getBytes(UTF8_CHARSET));
mDigest.update(data2.getBytes(UTF8_CHARSET));
hash = Hex.encodeHexString(mDigest.digest());

下面是Python实现:

from hashlib import sha256
...

text = "{\"1\": \"" + str(num) + "\"}"
mDigest = sha256()
mDigest.update(text.encode("UTF-8"))
mDigest.update(data1.encode("UTF-8"))
mDigest.update(data2.encode("UTF-8"))
hash = mDigest.hexdigest()

num、data1和data2对于这两个实现可能是相同的。我从Java应用程序收到的示例输出与Python输出不同,尽管输入相同。通过查看其他StackOverflow帖子,我想知道这是否与update或digest函数中的填充有关。你知道吗


Tags: textimport应用程序updatejavautf8numutf