哈希值 哈希表_哈希杰森

哈希值 哈希表

我最近写了一个简单的库,可预测地对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

哈希值 哈希表

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331707.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新浪微博搜索php待遇,新浪微博面试

PHP技术基础1、合并数据的函数。我当时回答的是array_merge(),array_combine()(注意与前者的区分);当时面试官告诉我还可以使用 加号()2,判断一个IP地址是否合法。只让说一下思路:(1)用点分割.,$arrIp explore();(2)判…

java集合——集合与数组间的转换+算法

【0】README 0.1) 本文描述转自 core java volume 1, 源代码为原创,旨在理解 java集合——集合与数组间的转换算法 的相关知识; 0.2) for full source code , please visit https://github.com/pacosonTang/core-jav…

java之String

一、String类的特性 String对象是不可变的,字符串一旦创建,就不可以改变。二、构造字符串字符串直接量String anew String("字符串直接量"); 字符数组String bnew String(chars);字符串直接量赋值,java把字符串直接量看作String对象…

java记录目录树_Java记录

java记录目录树https://openjdk.java.net/jeps/359概述了Java的新功能,该功能可能会/将在某些将来的Java版本中实现。 JEP建议使用一种新的“类别”:记录。 JEP中的示例内容如下: record Range( int lo, int hi) { public Range { if (lo >…

java集合——遗留的集合

【0】README 0.1) 本文描述转自 core java volume 1, 源代码为原创,旨在理解 java集合——遗留的集合 的相关知识; 0.2) for full source code , please visit https://github.com/pacosonTang/core-java-volume/blo…

oracle 扩展分区,Oracle 在线扩展分区

在对Oracle分区表操作是,当一个分区已经有了最大的分区,如何再次扩展分区呢?简单的方式是先删除最大分区,然后添加需要的分区在对Oracle分区表操作是,当一个分区已经有了最大的分区,如何再次扩展分区呢&…

java之StringBuider与StringBuffer

一、StringBuider与StringBuffer StringBuider与StringBuffer类比String更加灵活,只要使用字符串的地方,都可以使用StringBuider与StringBuffer类。三者的共同之处都是 final 类,不允许被继承,这主要是从性能和安全性上考虑的&…

织机原理_项目织机

织机原理为什么为什么? Java 8流背后的驱动程序之一是并发编程。 在流管道中,指定要完成的工作,然后任务将自动分配到可用处理器上: var result myData.parallelStream().map(someBusyOperation).reduce(someAssociativeBinOp)…

java集合——java.util.Properties类

【0】README 0.1)以下全文转自 :  http://trans.blog.51cto.com/503170/110227/ 【1】认识properties文件 1、 properties文件是一个文本文件2、 properties文件的语法有两种,一种是注释,一种属性配置。 注 释:前…

电力系统潮流计算matlab程序,大神们,求个电力系统潮流计算的matlab程序。

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼ninput(Please input n\n); %n表示系统的节点数d0input(Please input d0\n); %d0表示系统的误差minput(Please inpit m\n); %m表示系统的pq节点的个数p0ones(n-1,1);q0ones(m,1);d1;dpvones(n-1,1);dqvones(m,1);dpzeros(n-1,1);dq…

java之正则表达式

一、匹配字符串String类的matchs方法用的是正则表达式匹配,matchs方法与equals类似。"javac".matchs("javac");"javac".equals("javac");结果都为true。match方法更强大,不仅能匹配固定字符串,还能匹…

gradle配置_Gradle配置

gradle配置在这篇文章中,我们将介绍有关Gradle配置的综合文章。 1.技术 Gradle是用于自动任务管理的开源构建工具。 它基于Apache Ant,Apache Maven的概念。 Gradle是使用Groovy语言开发的。 Gradle是使用基于Groovy的领域特定语言(DSL&…

removeAll throws java.lang.UnsupportedOperationException

【1】出现的问题&#xff1a; 如果该列表list 不支持 removeAll 方法的话&#xff0c; 就会抛出UnsupportedOperationException 【2】解决方法&#xff1a; List<String> list new ArrayList(Arrays.asList(new String[]{"C","B","D"})…

C#的float、double与decimal

float 单精度浮点 32bit&#xff0c;double 双精度浮点64bit&#xff0c;decimal是高精度 128bit&#xff0c;浮点型。 float double 是 基本类型&#xff08;primitive type&#xff09;&#xff0c;decimal不是。 float 有效数字7位&#xff0c;范围 1.5 10E−45 to 3.4 …

matlab支持 编程语言,用于数学的10个优秀编程语言

原标题&#xff1a;用于数学的10个优秀编程语言译文&#xff1a;http://www.codeceo.com/article/10-programming-language-for-math.html英文&#xff1a;10 Great Programming Languages for Mathematics翻译&#xff1a;码农网 – 小峰作为一个对数学和编程语言充满激情的人…

java锁_Java锁

java锁锁是一种线程同步机制&#xff0c;例如同步块。 锁是使用同步块在内部实现的。 因此&#xff0c;我们可以在Java中使用锁代替同步关键字。 锁比同步块更灵活&#xff0c;更复杂。 从Java 5版本开始&#xff0c;JDK提供了几种锁实现&#xff0c;例如ReentrantReadWriteLo…

java线程——阻塞队列

【0】README 0.1&#xff09;本文均转自两篇网络文章&#xff0c; 转载地址在转载处做了标记&#xff0c; 旨在理清 “阻塞队列”的相关知识 &#xff1b; 【1】转自&#xff1a; http://www.cnblogs.com/dolphin0520/p/3932906.html 1.1&#xff09;在前面我们接触的队列都是…

C#接口

接口是指定一组函数成员而不实现成员的引用类型&#xff0c;其他类型-类和接口可以实现接口。1. 接口是一个引用类型&#xff0c;通过接口可以实现多重继承。2. C#中接口的成员不能有new、public、protected、internal、private等修饰符。3. 接口中只能声明"抽象"成员…

消费者驱动的契约测试_告诉我们您想要什么,我们将做到:消费者驱动的合同测试消息传递...

消费者驱动的契约测试相当早以前&#xff0c;我们从REST&#xff08;ful&#xff09; Web API的角度讨论了消费者驱动的合同测试 &#xff0c;尤其是将其投射到Java&#xff08; JAX-RS 2.0规范&#xff09;的角度。 可以公平地说&#xff0c;至少在公共API方面&#xff0c; RE…

linux将屏幕输出到文件,Linux命令执行的屏幕输出内容重定向到日志文件

摘要: 作者&#xff1a;Syn良子 出处&#xff1a;http://www.cnblogs.com/cssdongl 转载请注明出处快速mark一下这个命令细节&#xff0c;免得以后使用又忘记了大家都知道可以用echo来输出内容到文件&#xff0c;比如 echo “hello,word”>> temp.txt那么我现在想把hadoo…