java 计算hash_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();

}

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值