주니어 기초 코딩공부

[암호화] SHA256 java

jju_developer 2024. 1. 19. 11:58
728x90

안녕하세요 jju_developer입니다.

 

다들 그동안 안녕하셨나요?
저는 요즘 개발하면서 정신없는 하루를 보내고 있답니다!!

기존 회사에서 적용하던 방식인 aes256과 kcmvp 한국형 암호모듈 검증 프로그램을 활용하였다면,
이번에는 sha256으로 코딩을 하게 되어 과정을 기록하고자 합니다.

막상 코딩할 때는 기억이 나더라도 나중에는 까먹을 수도 있으니 적어보겠습니다!

차근차근 sha256이 무엇인지부터 알아보도록 하겠습니다.

 

SHA-256 이란?

SHA-256은 Secure Hash Algorithm 256-bit의 약자로, 해시 함수 중 하나입니다. 

이는 어떤 데이터든 고정된 크기의 해시 값으로 변환해주는 알고리즘입니다. 

이런 해시 함수는 데이터의 무결성을 확인하거나, 암호화에서 사용되기도 합니다.

 

Java에서는 MessageDigest 클래스를 사용하여 SHA-256 해싱을 구현할 수 있습니다.

 

아래는 간단한 예제입니다.

 

SHA-256 예제 01) 

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

public class SHA256Example {
    public static void main(String[] args) {
        String data = "Hello, SHA-256!";
        
        try {
            // MessageDigest 객체 생성 (SHA-256 선택)
            MessageDigest digest = MessageDigest.getInstance("SHA-256");

            // 데이터를 바이트 배열로 변환하여 해시 함수에 전달
            byte[] hashedBytes = digest.digest(data.getBytes());

            // 해시 값을 16진수 문자열로 변환
            String hashedString = bytesToHex(hashedBytes);

            // 결과 출력
            System.out.println("Original: " + data);
            System.out.println("Hashed: " + hashedString);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }

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

 

SHA(Secure Hash Algorithm) 알고리즘의 한 종류로서 256비트로 구성되며 64자리 문자열을 반환합니다.
해시 알고리즘 SHA-2 계열 중 하나이며, 2^256만큼 경우의 수를 만들 수 있습니다.

SHA-256 해시 함수는 어떤 길이의 값을 입력하더라도 256비트의 고정된 결과값을 반환합니다.

 

결론적으로는 입력 값이 좀만 바껴도 반환값이 완전히 달라지기 때문에

반환값을 토대로 입력값을 유추하는 것이 거의 불가능 하다고 볼 수 있겠죠?

 

SHA-256은 단방향 암호화 방식이기 때문에 복호화가 불가능합니다.
복호화를 하지 않아도 되기 때문에 속도가 빠르며, 사용 예로 비밀번호의 일치여부 확인이 있습니다.

 

제가 더 간단하게 이해하기 쉬운 방식으로 되어있는 예제를 보여드리겠습니다.

 

SHA-256 예제 02) 

import java.security.MessageDigest;

public class SHA256 {
	
	public static void main(String args[]){
		try {
			String data = "jju test";
			System.out.println(encrypt(data));
			System.out.println("jju encrypt data...");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
    public static String encrypt(String data) throws Exception {
    	byte[] textBytes = data.getBytes("UTF-8");
    	
        MessageDigest md = MessageDigest.getInstance("SHA-256");

        return Base64.encodeBase64String(md.digest(textBytes));
    }
}

 

테스트 결과값!!!!

이런 기초적인 부분을 활용하여
data에 암호화를 원하는 문구를 받아서 넣으면 될 것 같습니다..

오늘은 이렇게 기초적인 부분을 봐보았습니다.

앞으로 aes256s로 암호화 한 코드를 sha256로 바꾸면서 차이점이 어떤 것들이 있는지

실험을 해보고 더 기록하도록 하겠습니다~


오늘도 좋은 하루 보내세요~!

728x90