gpt4 book ai didi

javascript - 如何在 Python 和 JavaScript 中对 "json"嵌套字典进行相同的哈希处理?

转载 作者:太空宇宙 更新时间:2023-11-03 15:17:25 26 4
gpt4 key购买 nike

在 JavaScript 和 Python 中,一致散列受限于 JSON 可表示内容的对象/字典的最佳方法是什么?用多种不同的语言呢?

当然,有许多不同语言一致实现的散列函数采用字符串,但要对对象进行散列,您必须先将其转换为字符串表示形式。

我想要一个哈希函数,它将始终为任何语言的同一字典返回相同的值,但 JSON 规范不保证序列化表示中键的顺序。

json.dumps()JSON.stringify() 的行为是否相同?您将如何验证这一点?

如果没有,是否有一种序列化格式包含多种语言的库(我对 Python 和 JavaScript 实际上很感兴趣,但也对所有语言都很好奇)不需要调用者进行任何额外处理来产生一致的结果?

最佳答案

我会把它分成两个问题。

  1. 如何在 JavaScript 和 Python 中获得相同的序列化字符串?
  2. 您应该使用哪个字节数组散列函数?它必须是在 JavaScript 和 Python 中具有相同实现的既定算法。

使用(1)获取两个字符串,然后UTF8编码,然后使用(2)获取哈希。

由于 (2) 很简单,我将只解决 (1)。

确保您生成的两个 JSON 字符串相同的问题有多个方面。

  • 您需要使用未格式化的 JSON(没有多余的空格、制表符或换行符)。
  • 空值必须被同等对待。如果值为 null,某些序列化程序将默认丢弃字典键值对。
  • 字典中键值对的顺序必须一致。
  • JSON 数字序列化应该是一致的。例如,您不能将整数 1 在一侧序列化为 1 而在另一侧序列化为 1.0。 (但这可能不是什么大问题。)
  • 两者的字符串编码应该相同。 JSON 允许序列化为 Unicode 文本,只要求 "\ 在 JSON 字符串中进行反斜杠转义。然而,大多数序列化程序做的比必要的更多,并且减少了几乎所有 Unicode 字符到 \uXXXX 等效项。有关 JSON 字符串编码的详细信息,请参阅 json.org。消除所有歧义的一种方法是仅在绝对必要时才转义。

您需要确保所有这些都在 JavaScript 和 Python 之间匹配。我使用的大多数 JSON 序列化库都为我在上面的列表中提到的所有内容提供了配置 Hook 。不幸的是,我对 JavaScript 或 Python 库不是很熟悉。

关于javascript - 如何在 Python 和 JavaScript 中对 "json"嵌套字典进行相同的哈希处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19851990/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com