哈希值 哈希表_哈希杰森

阳光穿透心脏的1/2处 2023-02-25 04:56 117阅读 0赞

哈希值 哈希表

我最近写了一个简单的库,可预测地对json进行哈希处理 。

该实用程序基于出色的Jackson Json解析库构建

问题

我需要从相当大的基于json的内容生成的哈希值,以便稍后确定该内容是否发生了更改。 将json视为字符串不是格式化的选项,键改组可能会使结果偏斜。

该实用程序很简单–遍历json的Jackson JsonNode表示形式:

1.对于每个对象节点,它对键进行排序,然后遍历元素,从所有子节点计算聚合哈希

2.对于每个数组节点,它遍历到元素并聚合哈希 3.对于每个终端节点,它获取键和值并从中生成SHA-256哈希

这样,将为整个树生成哈希。

考虑一个用以下方法创建的Jackson Json节点:

  1. ObjectNode jsonNode = JsonNodeFactory
  2. .instance
  3. .objectNode()
  4. .put( "key1" , "value1" ); jsonNode.set( "key2" , JsonNodeFactory.instance.objectNode()
  5. .put( "child-key2" , "child-value2" )
  6. .put( "child-key1" , "child-value1" )
  7. .put( "child-key3" , 123 .23f)); jsonNode.set( "key3" , JsonNodeFactory.instance.arrayNode()
  8. .add( "arr-value1" )
  9. .add( "arr-value2" )); String calculatedHash = sha256Hex(
  10. sha256Hex( "key1" ) + sha256Hex( "value1" )
  11. + sha256Hex( "key2" ) + sha256Hex(
  12. sha256Hex( "child-key1" ) + sha256Hex( "child-value1" )
  13. + sha256Hex( "child-key2" ) + sha256Hex( "child-value2" )
  14. + sha256Hex( "child-key3" ) + sha256Hex( "123.23" ))
  15. + sha256Hex( "key3" ) + sha256Hex(
  16. sha256Hex( "arr-value1" )
  17. + sha256Hex( "arr-value2" )) );

此处json具有3个键,“ key1”,“ key2”,“ key3”。 “ key1”具有原始文本字段,“ key2”是对象节点,“ key3”是字符串数组。 CalculationHash显示了如何为整个树计算聚合的哈希,该实用程序遵循相同的过程来聚合哈希。

如果您对此感兴趣,可以在bintray中找到该库-https://bintray.com/bijukunjummen/repo/json-hash ,并托管在github上的此处 – https://github.com/bijukunjummen/json-杂凑

翻译自: https://www.javacodegeeks.com/2019/11/hash-a-json.html

哈希值 哈希表

发表评论

表情:
评论列表 (有 0 条评论,117人围观)

还没有评论,来说两句吧...

相关阅读

    相关 关于关于关于

    今天老师讲了哈希,草草地整理一下: 哈希表,也称散列表,是一种高效的数据结构。它的最大优点就是把数据存储和查找所消耗的时间大大降低,几乎可以看成是 O(1)的,而代价是消耗比

    相关

    什么是哈希表    哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的[数据结构][Link 1]。也就是说,它通过把关键码

    相关

    散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速

    相关

    我们知道,通过对数组进行直接寻址(Direct Addressing),可以在 O(1) 时间内访问数组中的任意元素。所以,如果存储空间允许,可以提供一个数组,为每个可能的关键

    相关

    一、简介 如果所有的键都是小整数,那么我们可以用一个数组来实现无序的符号表,将键作为数组的索引i而数组中i(键)处储存的就是对应的值。 这样就可以快速地访问任意键的值,

    相关

    【一】哈希表 > 他通过把关键码值映射到表中的一个位置来访问记录,以加快查找的速度。这个映射函数就是散列函数。 ![watermark_type_ZmFuZ3poZW5na