블록체인/블록체인 이론

Java에서 SHA-256 함수 구현해보기

P_eli 2024. 3. 4. 17:41
728x90
반응형

먼저 이클립스에서 JavaProject를 생성해줍니다.

해당 javaProject에 패키지를 util로 만든 뒤에 class 파일을 "Util"로 생성해 아래의 코드를 입력합니다.

package util;

import java.security.MessageDigest;

public class Util{
    // 입력으로 받은 문자열을 해시값으로 변환하는 메소드
    public static String getHash(String input) {
        StringBuffer result = new StringBuffer();
        try {
            // SHA-256 해시 알고리즘을 사용하기 위해 MessageDigest 객체 생성
            MessageDigest md = MessageDigest.getInstance("SHA-256");
            // 입력값을 바이트 배열로 변환하여 해시 알고리즘에 업데이트
            md.update(input.getBytes());
            // 해시값 계산
            byte bytes[] = md.digest();
            // 해시값을 16진수로 변환하여 문자열에 저장
            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 해시로 변환하는 유틸리티 클래스입니다. 코드를 하나씩 살펴보면서 자세히 설명해 보겠습니다.

 

자바의 내장 클래스와 메서드를 사용하기 위해 해당 클래스를 가져오는 import 문이 있습니다. 여기서는 MessageDigest 클래스를 사용하고 있습니다. 이 클래스는 해시 알고리즘을 적용하기 위해 필요합니다.

import java.security.MessageDigest;

 

이제 우리가 집중할 부분입니다. Util 클래스의 getHash 메서드는 문자열을 인자로 받아서 해당 문자열의 SHA-256 해시값을 반환합니다.

public static String getHash(String input) {

 

그다음으로는 결과를 저장할 StringBuffer 객체를 생성합니다.

StringBuffer result = new StringBuffer();

 

이제 해시 알고리즘을 적용할 준비를 합니다. 여기서는 SHA-256 알고리즘을 사용합니다.

try {
	MessageDigest md = MessageDigest.getInstance("SHA-256");

 

입력으로 받은 문자열을 바이트 배열로 변환한 후, 해당 배열에 대해 해시 알고리즘을 적용합니다.

md.update(input.getBytes());

 

해시값을 계산하고, 바이트 배열로 저장합니다.

byte bytes[] = md.digest();

 

이제 각 바이트를 16진수 문자열로 변환하여 결과에 추가합니다.

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();
}

 

이제 해당 함수를 이용해 문자열을 Hash처리한 SHA-256 문자열을 출력해 봅시다.

만들어둔 JavaProject에 core 패키지를 생성 후 아래 코드를 입력해 줍니다.

 

package core;
import util.Util;
public class BlockChainStarter{

	public static void main(String[] args){
		System.out.println("안녕하세요");
		System.out.println(Util.getHash("안녕하세요"));
	}

}

 

출력결과

728x90
반응형