赞
踩
计算方法有多种,如,可以直接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工具类的实现,用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();
- }
- }

©著作权归作者所有:来自51CTO博客作者yangjiang1988的原创作品,如需转载,请注明出处,否则将追究法律责任
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。