標籤:java區塊hash 區塊Hash java區塊鏈 區塊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(); }}
Java 區塊鏈BLOCKCHAIN中區塊BLOCK的hash值的計算