我有一个Java应用程序,它使用SHA-256哈希值生成令牌。我正在尝试将实现作为端到端测试套件的一部分移植到Python 3。
我已经尝试在Python实现中遵循与Java实现相同的步骤,但是得到的十六进制编码结果却有所不同。 Java使用JDK 11,而我使用Python 3.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帖子,我想知道这是否与更新或摘要功能中的填充有关。