1

这是如何可靠地散列 JavaScript 对象?,有人想要可靠地散列 javascript 对象;

现在 json-ld 规范已经过验证,我看到有一个规范化过程,他们宣传作为规范化 json 对象的潜在方法:

使用 RDF 数据集归一化算法对数据进行归一化,然后将输出转储为归一化的 NQuads 格式。然后可以通过 SHA-256 或类似算法处理 NQuad,以获得数据集内容的确定性哈希。

构建 json 对象的散列一直很痛苦,因为类似

sha1(JSON.stringify(object))

不工作或不能保证在不同的实现中工作相同(键的顺序未定义示例)。

json-ld 是否像广告宣传的那样工作?将其用作散列对象的通用 json 规范化过程是否安全?这些对象可以是标准的 json 对象,还是需要一些 json-ld 装饰(@context,..)来规范化?

4

1 回答 1

4

是的,规范化适用于 JSON-LD,但需要为对象提供上下文(通过 @context 属性),以便它们生成任何 RDF。它是以 NQuads 格式确定性地输出的 RDF(例如,然后可以对其进行散列)。

如果 JSON-LD 文档中的属性不是通过 @context 定义的,那么它将在处理过程中被删除。JSON-LD 要求您通过将文档中的属性与 URL 相关联来为它们提供全局含义(语义)。这些 URL 可以提供有关属性含义、它们的范围、域等的更多机器可读信息。通过这种方式,数据变得“链接”——您可以从一个 API 的上下文中理解 JSON 文档的含义另一个,您可以遍历文档(通过 HTTP)以查找更多信息。

所以对主要问题的简短回答是“是的,您可以使用 JSON-LD 规范化为 JSON 对象构建唯一哈希”,但是需要注意的是 JSON 对象必须是 JSON-LD 对象,这确实构成JSON 的一个子集。规范化算法发明的主要原因之一是用于比较的散列和数字签名图(JSON-LD 文档)。

于 2014-07-13T20:23:54.657 回答