자바 암호화-메시지 다이제스트

해시 함수는 매우 유용하며 거의 모든 정보 보안 응용 프로그램에 나타납니다.

해시 함수는 숫자 입력 값을 다른 압축 숫자 값으로 변환하는 수학 함수입니다. 해시 함수에 대한 입력은 임의의 길이이지만 출력은 항상 고정 길이입니다.

해시 함수에 의해 반환 된 값이 호출됩니다. message digest 또는 단순히 hash values. 다음 그림은 해시 함수를 보여줍니다.

Java는 MessageDigest패키지 java.security에 속합니다. 이 클래스는 임의 길이 메시지를 메시지 다이제스트로 변환하는 SHA-1, SHA 256, MD5 알고리즘과 같은 알고리즘을 지원합니다.

주어진 메시지를 메시지 다이제스트로 변환하려면 다음 단계를 따르십시오.

1 단계 : MessageDigest 객체 생성

MessageDigest 클래스는 getInstance(). 이 메서드는 사용할 알고리즘의 이름을 지정하는 String 변수를 받아들이고 지정된 알고리즘을 구현하는 MessageDigest 개체를 반환합니다.

다음을 사용하여 MessageDigest 객체를 만듭니다. getInstance() 방법은 아래와 같습니다.

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

2 단계 : 생성 된 MessageDigest 개체에 데이터 전달

메시지 다이제스트 객체를 생성 한 후에는 메시지 / 데이터를 전달해야합니다. 다음을 사용하여 그렇게 할 수 있습니다.update() 의 방법 MessageDigest 클래스에서이 메서드는 메시지를 나타내는 바이트 배열을 받아들이고 위에서 만든 MessageDigest 개체에 추가 / 전달합니다.

md.update(msg.getBytes());

3 단계 : 메시지 요약 생성

다음을 사용하여 메시지 요약을 생성 할 수 있습니다. digest() MessageDigest 클래스의 메소드이 메소드는 현재 객체의 해시 함수를 계산하고 바이트 배열의 형태로 메시지 다이제스트를 반환합니다.

digest 메소드를 사용하여 메시지 다이제스트를 생성합니다.

byte[] digest = md.digest();

다음은 파일에서 데이터를 읽고 메시지 다이제스트를 생성하여 인쇄하는 예제입니다.

import java.security.MessageDigest;
import java.util.Scanner;

public class MessageDigestExample {
   public static void main(String args[]) throws Exception{
      //Reading data from user
      Scanner sc = new Scanner(System.in);
      System.out.println("Enter the message");
      String message = sc.nextLine();
	  
      //Creating the MessageDigest object  
      MessageDigest md = MessageDigest.getInstance("SHA-256");

      //Passing data to the created MessageDigest Object
      md.update(message.getBytes());
      
      //Compute the message digest
      byte[] digest = md.digest();      
      System.out.println(digest);  
     
      //Converting the byte array in to HexString format
      StringBuffer hexString = new StringBuffer();
      
      for (int i = 0;i<digest.length;i++) {
         hexString.append(Integer.toHexString(0xFF & digest[i]));
      }
      System.out.println("Hex format : " + hexString.toString());     
   }
}

산출

위의 프로그램은 다음과 같은 출력을 생성합니다-

Enter the message
Hello how are you
[B@55f96302
Hex format: 2953d33828c395aebe8225236ba4e23fa75e6f13bd881b9056a3295cbd64d3