如何使Python SHA-256摘要与Java SHA-256摘要匹配?

如何使Python SHA-256摘要与Java SHA-256摘要匹配?,java,python,hash,hashlib,Java,Python,Hash,Hashlib,我有一个Java应用程序,它使用SHA-256哈希生成令牌。我试图将实现移植到Python3,作为端到端测试套件的一部分 我在Python实现中尝试了与Java实现中相同的步骤,但是得到了不同的十六进制编码结果。Java使用JDK11,我使用的是Python 3.7 以下是Java实现: import org.apache.commons.codec.binary.Hex; 导入java.nio.charset.charset; 导入java.security.MessageDigest; ..

我有一个Java应用程序,它使用SHA-256哈希生成令牌。我试图将实现移植到Python3,作为端到端测试套件的一部分

我在Python实现中尝试了与Java实现中相同的步骤,但是得到了不同的十六进制编码结果。Java使用JDK11,我使用的是Python 3.7

以下是Java实现:

import org.apache.commons.codec.binary.Hex;
导入java.nio.charset.charset;
导入java.security.MessageDigest;
...
text=“{\“1\”:\”+num+“\”};
MessageDigest mDigest=MessageDigest.getInstance(“SHA-256”);
mDigest.update(text.getBytes(UTF8_字符集));
mDigest.update(data1.getBytes(UTF8_字符集));
mDigest.update(data2.getBytes(UTF8_字符集));
hash=Hex.encodeHexString(mDigest.digest());
以下是Python实现:

从hashlib导入sha256
...
text=“{\“1\”:\”+str(num)+“\”}
mDigest=sha256()
mDigest.update(文本编码(“UTF-8”))
mDigest.更新(数据1.编码(“UTF-8”))
mDigest.更新(数据2.编码(“UTF-8”))
hash=mDigest.hexdigest()

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

在python字符串
text=“{\'1\':\”+str(num)+“\”}”中,在
后面有一个空格。所以你的文本输入不一样。哇。。。这就解决了问题。谢谢编辑:我很惊讶,因为在这个字符串连接之前,我在字典上做json.dumps,也在做str({“1”:str(num)}),但两者都不起作用。python字符串
text=“{\“1\”:\”+str(num)+“\”}”
后面有一个空格
。所以你的文本输入不一样。哇。。。这就解决了问题。谢谢编辑:我很惊讶,因为在这个字符串连接之前,我在字典上做json.dumps,并且只做str({“1”:str(num)}),但两个都不起作用。