引言
这两天开始学习区块链相关知识,在B站学习到有人用Js实现了proofOfWork基本原理,就自己用Java写了一下
proofOfWork
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
public class proofOfWork extends SHA256{
/**
* 随机字符串
* @param length
* @return
*/
public static String getRandomString(int length){
String str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
Random random=new Random();
StringBuffer sb=new StringBuffer();
for(int i=0;i<length;i++){
int number=random.nextInt(62);
sb.append(str.charAt(number));
}
return sb.toString();
}
public static void main(String[] args){
long starttime = System.currentTimeMillis();
SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日-hh时mm分ss秒");
Date startdate = new Date(starttime);
String str = "Default";
int count = 1;//计数
while(true){
if(!getSHA256(str).substring(0,5).equals("00000")) {
str = getRandomString(10);
count++;
} else {
long finishtime = System.currentTimeMillis();
Date finishdate = new Date(finishtime);
System.out.println("Start: " + starttime);
System.out.println(format.format(startdate));
System.out.println("Finish: " + finishtime);
System.out.println(format.format(finishdate));
System.out.println("String: " + str + " Count: " + count);
System.out.println(getSHA256(str));
break;
}
}
}
}
其中用到的随机字符串参考: https://www.cnblogs.com/jpfss/p/9772019.html
SHA256
参考自: https://blog.csdn.net/weixin_34411563/article/details/91991570
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class SHA256 {
/**
* 利用java原生的类实现SHA256加密
*
* @param str 加密后的报文
* @return
*/
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 (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return encodestr;
}
/**
* 将byte转为16进制
*
* @param bytes
* @return
*/
private static String byte2Hex(byte[] bytes) {
StringBuffer stringBuffer = new StringBuffer();
String temp = null;
for (int i = 0; i < bytes.length; i++) {
temp = Integer.toHexString(bytes[i] & 0xFF);
if (temp.length() == 1) {
// 1得到一位的进行补0操作
stringBuffer.append("0");
}
stringBuffer.append(temp);
}
return stringBuffer.toString();
}
/**
* 调用并测试SHA256
* @param args
*/
public static void main(String[] args){
System.out.println("The hash you need is: " + getSHA256("%^&*%^&"));
}
}