哈希值 哈希表_哈希杰森

哈希值 哈希表

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

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

问题

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

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

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

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

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

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

 ObjectNode jsonNode = JsonNodeFactory 
         .instance 
         .objectNode() 
         .put( "key1" , "value1" );  jsonNode.set( "key2" , JsonNodeFactory.instance.objectNode() 
         .put( "child-key2" , "child-value2" ) 
         .put( "child-key1" , "child-value1" ) 
         .put( "child-key3" , 123 .23f));  jsonNode.set( "key3" , JsonNodeFactory.instance.arrayNode() 
         .add( "arr-value1" ) 
         .add( "arr-value2" ));  String calculatedHash = sha256Hex( 
         sha256Hex( "key1" ) + sha256Hex( "value1" ) 
                 + sha256Hex( "key2" ) + sha256Hex( 
                 sha256Hex( "child-key1" ) + sha256Hex( "child-value1" ) 
                         + sha256Hex( "child-key2" ) + sha256Hex( "child-value2" ) 
                         + sha256Hex( "child-key3" ) + sha256Hex( "123.23" )) 
                 + sha256Hex( "key3" ) + sha256Hex( 
                 sha256Hex( "arr-value1" ) 
                         + 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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值