美文网首页
java实现区块链hash值计算

java实现区块链hash值计算

作者: Lavidateamadeve | 来源:发表于2018-08-18 10:28 被阅读0次

/**

    * 计算hash服务

    * @param index 索引

    * @param previousHash 前一个区块的hash值

    * @param timestamp 时间戳

    * @param data 数据

    * @param nonce 难度系数

    * @return 当前hash

    */

   private String calculateHash(int index, String previousHash, long timestamp, String data,long nonce) {

       StringBuilder builder = new StringBuilder(index);

       builder.append(previousHash).append(timestamp).append(data).append(nonce);

       return CryptoUtil.getSHA256(builder.toString());

   }

2Java区块链中SHA-256算法的简单实现

SHA(Secure Hash Algorithm)安全散列算法,这种算法的特点是数据的少量更改会在Hash值中产生不可预知的大量更改,hash值用作表示大量数据的固定大小的唯一值,而SHA256算法的hash值大小为256位。之所以选用SHA256是因为它的大小正合适,一方面产生重复hash值的可能性很小,另一方面在区块链实际应用过程中,有可能会产生大量的区块,而使得信息量很大,那么256位的大小就比较恰当了。

java 的SHA-256工具类的实现,用jdk自带工具MessageDigest.getInstance("SHA-256");

package cn.wenwuyi.blockchain.util;

import java.security.MessageDigest;

/**

*

* 类名:CryptoUtil.java

* 描述:TODO

* 时间:2018年3月12日 下午7:06:04

* @author cn.wenwuyi

* @version 1.0

*/

public class CryptoUtil {

   private CryptoUtil() {

   }

   public static String getSHA256(String str) {

       MessageDigest messageDigest;

       String encodeStr = "";

       try {

           messageDigest = MessageDigest.getInstance("SHA-256");

           messageDigest.update(str.getBytes("UTF-8"));

           encodeStr = byte2Hex(messageDigest.digest());

       } catch (Exception e) {

           System.out.println("getSHA256 is error" + e.getMessage());

       }

       return encodeStr;

   }

   private static String byte2Hex(byte[] bytes) {

       StringBuilder builder = new StringBuilder();

       String temp;

       for (int i = 0; i < bytes.length; i++) {

           temp = Integer.toHexString(bytes[i] & 0xFF);

           if (temp.length() == 1) {

               builder.append("0");

           }

           builder.append(temp);

       }

       return builder.toString();

   }

}

相关文章

  • java实现区块链hash值计算

    /** * 计算hash服务 * @param index 索引 * @param previousH...

  • java实现区块链

    区块链是由一个个的区块构成,区块主要包含前一个区块的hash值,加密的数据data,当前区块的hash值。 pac...

  • 比特币如何挖矿(挖矿原理)-工作量证明

    在区块链记账原理 一篇,我们了解到记账是把交易记录、交易时间、账本序号、上一个Hash值等信息计算Hash打包的过...

  • 区块链入门

    挖矿就是计算机进行每个区块的哈希值计算,不是任意一个 Hash 都可以,只有满足条件的 Hash 才会被区块链接受...

  • HashMap底层实现原理

    java1.7 以前HashMap底层由数组+链表形式实现。1.1 插入数据时首先计算数据key的hash值,根据...

  • 比特币

    计算哈希的特性注意:区块不存储自己区块的hash值,节点接收区块后独立计算并储存在本地 input:输入,表明钱的...

  • (17)Redis的rehash与ConcurrentHashM

    dict是Redis的hash数据结构,用key值计算hashkey,元素插入到某个hash链上(拉链法解冲突)。...

  • MySQL Hash索引 vs B-Tree索引

    Hash 索引通过 hash 算法计算 hash 值,存储的索引应该也是 hash 值,查找时先计算查找字段的 h...

  • 科普知识——Hash(哈希)

    在区块链学习中,经常会遇到Hash(哈希,也翻译为散列)的概念。 区块链的定义就使用到Hash,区块链就是所有的区...

  • Hash算法

    在开始接触区块链开始就一定会提到Hash算法,在之前我认为通过这种计算方式,输入不同的输入值可以快速的得到长度一致...

网友评论

      本文标题:java实现区块链hash值计算

      本文链接:https://www.haomeiwen.com/subject/aojcbftx.html