【发布时间】:2020-02-14 16:40:48
【问题描述】:
我正在尝试比较 java 和 python 中的散列结果。我有一个用于 java 和 python 的代码的 sn-p 都为使用 UTF-8 编码提供相同的输出,但为使用 sha256 的哈希提供不同的(种类)结果。
JAVA代码:
String hash = "hello"
byte[] test = hash.getBytes();
MessageDigest sha = MessageDigest.getInstance("SHA-256");
byte[] key = sha.digest(hash.getBytes());
输出: 测试 ==> [104, 101, 108, 108, 111] 键 ==> [44, -14, 77, -70, 95, -80, -93, 14, 38, -24, 59, 42, -59, -71, -30, -98, 27, 22, 30、92、31、-89、66、94、115、4、51、98、-109、-117、-104、36]
Python 代码:
hash = "hello"
test = list(bytearray(text.encode()))
m = hashlib.sha256()
m.update(hash.encode("UTF-8"))
data = m.digest()
key = list(data)
输出: test ==> 与 Java 输出相同 键 ==> [44, 242, 77, 186, 95, 176, 163, 14, 38, 232, 59, 42, 197, 185, 226, 158, 27, 22, 30, 92, 31, 167, 66 , 94, 115, 4, 51, 98, 147, 139, 152, 36]
【问题讨论】:
-
请注意,它几乎肯定与您的输入字符串无关,但您实际上并未在 Java 代码中指定编码,它最终将使用平台默认编码。最好在 .getBytes() 调用中明确说明:
hash.getBytes(StandardCharsets.UTF_8).
标签: java python-3.x hash sha256