哈希杰森
我最近寫了一個簡單的庫,可預測地對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
總結
 
                            
                        - 上一篇: cors spring_Spring,R
- 下一篇: 服务器如何防御ddos(服务器ddos防
