core > BlockChainStarter

package core;

import util.Util;

public class BlockChainStarter {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		// STEP 1. 해시 알고리즘은 입력 값이 조금만 바뀌어도 결과는 완전히 다른 값이 나온다. 채굴의 원리는 이러한 눈사태 효과에서 출발한다.
		System.out.println(Util.getHash("이승엽")); // 0c2bc0396e93dcc356680303162ced49c0fe2fed31ed1da7753113e413a2c06a
		System.out.println(Util.getHash("이승엽1")); // 55868675c69c4009a2dc5baa44b5326f93429b587b10828a622de61bca097bd7
		
		// STEP 2. 작업 증명(Proof of Work) : 비트코인에서 사용되고 있는 채굴 방식
		int nonce = 0;
		
		while(true) { // 채굴
			
			// 16진수 6자리 => 16 x 16 x 16 x 16 x 16 x 16 => 2의 24승(난이도)
			if(Util.getHash(nonce + "").substring(0, 6).equals("000000")) { // 어떠한 숫자 nonce를 문자열 형태로 바꾼 후 이것의 해시 값이 "000000"으로 시작할 때 채굴에 성공
				System.out.println("정답 : " + nonce); // 665782
				System.out.println("해시 값 : " + Util.getHash(nonce + "")); // 0000000399c6aea5ad0c709a9bc331a3ed6494702bd1d129d8c817a0257a1462
				break;
			}
			
			nonce++; // nonce 1씩 증가
		}
		// 작업 증명이라는 합의 알고리즘을 사용하는 블록체인 시스템은 이처럼 무작위의 입력값을 대입하여 정답(nonce)을 구하는 방식으로 채굴이 가능하도록 설계가 되어있다.
	}
}

util > Util

package util;

import java.security.MessageDigest;

public class Util {
	
	public static String getHash(String input) { // 단순 문자열 input
		StringBuffer result = new StringBuffer();
		
		try {
			MessageDigest md = MessageDigest.getInstance("SHA-256"); // Secure Hash Algorithm // 256비트로 구성 // 64자리 문자열 반환
			md.update(input.getBytes());
			byte bytes[] = md.digest();
			
			for(int i = 0; i < bytes.length; i++) {
				result.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1));
			}
		} catch(Exception e) {
			e.printStackTrace();
		}
		
		return result.toString(); // SHA-256 해시를 적용한 결과 리턴
	}
}

 

 

'Block Chain' 카테고리의 다른 글

[Block Chain] Java 실습-3  (0) 2022.12.21
[Block Chain] Java 실습-2  (0) 2022.12.21
[Block Chain] 암호화폐  (0) 2022.12.01
[Block Chain] 해시  (0) 2022.12.01
[Block Chain] 쉽게 이해하기  (0) 2022.11.30

+ Recent posts