Java에서 SHA-256 함수 구현해보기
먼저 이클립스에서 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("안녕하세요"));
}
}