【问题标题】:Same results for Encoding, but different results for hashing编码的结果相同,但散列的结果不同
【发布时间】: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


【解决方案1】:

这些是相同的结果。您只是以不同的方式打印它们,使用有符号字节而不是 Java 的无符号字节。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-12
    • 2022-08-05
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    • 2021-12-25
    相关资源
    最近更新 更多