본문 바로가기
Java

[JAVA]SHA-256 를 사용한 문자열 암호화(비밀번호 생성)

by teamnova 2023. 6. 5.

안녕하세요 이번시간에는 JAVA에서 SHA-256 함수를 사용해서 암호화를 해보겠습니다.

SHA-256 알고리즘은 java.security.MessageDigest 클래스를 사용하여 구현할 수 있습니다. 

먼저 getInstance("SHA-256") 메서드를 호출하여 SHA-256 알고리즘의 인스턴스를 생성한 다음, 

update() 메서드를 호출하여 입력 문자열의 바이트 배열을 업데이트합니다. 

마지막으로 digest() 메서드를 호출하여 해시 값을 계산하고, 

계산된 해시 값을 bytesToHex() 메서드를 사용하여 16진수 문자열로 변환하여 반환합니다. 

bytesToHex() 메서드는 바이트 배열의 각 바이트 값을 16진수 문자열로 변환하여 StringBuilder에 추가하고, 

StringBuilder의 내용을 문자열로 반환합니다.

 

해당 클래스입니다.

SHA256.java

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SHA256 {

    // 입력 문자열을 SHA-256으로 암호화하여 해시 값을 반환하는 메서드
    public String encrypt(String text) throws NoSuchAlgorithmException {
	    // SHA-256 알고리즘의 인스턴스 생성
        MessageDigest md = MessageDigest.getInstance("SHA-256");         
        // 입력 문자열의 바이트 배열을 업데이트하여 해시 값을 계산
        md.update(text.getBytes()); 
		// 계산된 해시 값을 16진수 문자열로 변환하여 반환
        return bytesToHex(md.digest()); 
    }

    // 바이트 배열을 16진수 문자열로 변환하는 메서드
    private String bytesToHex(byte[] bytes) {
        StringBuilder builder = new StringBuilder();
        for (byte b : bytes) {
        	// 바이트 값을 16진수 문자열로 변환하여 StringBuilder에 추가
            builder.append(String.format("%02x", b)); 
        }
        // StringBuilder의 내용을 문자열로 반환
        return builder.toString(); 
    }

}

 

 

이제 메인메서드 만들어서 테스트 해보겠습니다.

import java.security.NoSuchAlgorithmException;
public class Main {
    public static void main(String[] args) throws NoSuchAlgorithmException {
        //작성 클래스의 인스턴스 생성
        SHA256 sha256 = new SHA256();
        String password = "비밀번호";
        String password2 = "비밀번호2";

        //cryptogram : SHA256으로 암호화된 비밀번호
        String cryptogram = sha256.encrypt(password);

        System.out.println("input         : "+password);
        System.out.println("After SHA256  : "+ cryptogram);
        //비밀번호 일치 여부
        System.out.println(password+" : "+cryptogram.equals(sha256.encrypt(password)));
        System.out.println(password2+" : "+cryptogram.equals(sha256.encrypt(password2)));
    }
}

 

결과입니다. 감사합니다.