美文网首页
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值计算

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