Java 區塊鏈BLOCKCHAIN中區塊BLOCK的hash值的計算

Java 區塊鏈中區塊的hash值的計算

計算方法有多種,如,可以直接String拼接,也可以用stringbuffer,或者stringbuilder 。這裏採用了速度較快的stringbuilder,自己編程的時候可採用stringbuffer。
其中index是區塊BLOCK的索引,timestamp是區塊BLOCK的時間戳,data是區塊BLOCK內包含的數據,nonce爲該區塊的難度係數。總體計算代碼如下:

 /**
     * 計算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());
    }

Java區塊鏈中SHA-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();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章