Java에서 MD5 해시 생성

Mohd Mohtashim Nawaz 2023년10월12일
  1. Java의 MD5 해싱 알고리즘
  2. Java에서 MD5 해시 사용
  3. Java의 대용량 데이터에 MD5 해시 사용
  4. 결론
Java에서 MD5 해시 생성

이 기사에서는 데이터 해시를 생성하는 MD5 알고리즘과 Java에서 데이터의 MD5 해시를 생성하는 방법을 이해합니다.

Java의 MD5 해싱 알고리즘

MD5 해싱 알고리즘은 암호화 해싱 알고리즘으로 데이터 파일의 체크섬으로 많이 사용된다. 이 알고리즘을 사용하여 데이터의 128비트 암호화 해시를 생성할 수 있습니다.

MD5 해싱 알고리즘은 최신 보안 해싱 알고리즘보다 훨씬 빠르기 때문에 널리 사용됩니다.

Java에서 MD5 해시 사용

Java는 파일 전송 및 서버 측 프로그래밍에 널리 사용됩니다. MD5 해시를 생성하는 라이브러리를 찾는 것은 놀라운 일이 아닙니다. Java는 Java의 'security' 패키지에 있는 MessageDigestSpi의 하위 클래스인 MessageDigest 클래스를 제공합니다.

Java에서 MD5 해시를 생성하려면

  • Java 보안 패키지에서 MessageDisgest 클래스를 가져옵니다.
  • 메시지 다이제스트를 가져오기 전에 데이터를 바이트 스트림으로 변환합니다.
  • 그런 다음 getInstance() 메서드를 호출하여 MD5 해싱 알고리즘의 인스턴스를 만듭니다.

    예시 :

    public static MessageDigest getInstance(String algorithm) throws NoSuchAlgorithmException
    
  • MD5 해시를 얻으려는 데이터를 전달하여 digest() 메서드를 호출합니다.

    예시:

    public byte[] digest(byte[] input)
    
  • 메시지 다이제스트를 바이트 배열에 바이트 스트림으로 저장합니다.
  • 마지막으로 메시지 다이제스트를 바이트에서 문자열로 변환합니다.

Java의 작업 코드를 사용하여 위의 접근 방식을 이해합시다.

코드 조각:

import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;

public class md5Test {
  public static void main(String[] args) {
    String str;
    Scanner scan = new Scanner(System.in);
    str = scan.nextLine();
    System.out.println("Your input: " + str);

    byte[] msg = str.getBytes();

    byte[] hash = null;
    try {
      MessageDigest md = MessageDigest.getInstance("MD5");
      hash = md.digest(msg);
    } catch (NoSuchAlgorithmException e) {
      e.printStackTrace();
    }
    StringBuilder strBuilder = new StringBuilder();
    for (byte b : hash) {
      strBuilder.append(String.format("%02x", b));
    }
    String strHash = strBuilder.toString();
    System.out.println("The MD5 hash: " + strHash);
  }
}

출력:

Hello, Peter
Your input: Hello, Peter
The MD5 hash: 945062a2fee23e0901b37fcb5cd952c9

Java is so awesome.
Your input: Java is so awesome.
The MD5 hash: 601835019da217140c2755c919ee18c2

Java의 대용량 데이터에 MD5 해시 사용

데이터가 크거나 데이터를 청크로 읽는 경우 update() 메소드를 사용하십시오.

예시:

public void update(byte[] input)

데이터 청크를 읽을 때마다 현재 청크를 전달하여 update() 메서드를 호출해야 합니다. 모든 데이터를 읽은 후 digest() 메서드의 다음 다형성 형식을 사용합니다.

예시:

public byte[] digest() // It means you will pass no parameter to the `digest()` method.

데모를 위해 다음 예제를 볼 수 있습니다.

코드 조각:

import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;

public class md5Test {
  public static void main(String[] args) {
    String str;
    Scanner scan = new Scanner(System.in);
    System.out.println("Enter message:");
    str = scan.nextLine();
    System.out.println("Your input: " + str);

    byte[] hash = null;

    MessageDigest md = null;

    try {
      md = MessageDigest.getInstance("MD5");
    } catch (NoSuchAlgorithmException e) {
      e.printStackTrace();
    }

    md.update(str.getBytes());

    System.out.println("Enter message:");
    str = scan.nextLine();

    md.update(str.getBytes());
    hash = md.digest();

    StringBuilder strBuilder = new StringBuilder();
    for (byte b : hash) {
      strBuilder.append(String.format("%02x", b));
    }
    String strHash = strBuilder.toString();
    System.out.println("The MD5 hash: " + strHash);
  }
}

출력:

Enter message:
Hello Java
Your input: Hello Java
Enter message:
I'm Peter
The MD5 hash: 9008f99fa602a036ce0c7a6784b240b1

결론

데이터를 공유하는 동안 보장해야 하는 기본적인 보안 조치 중 하나는 데이터 무결성을 보장하는 것입니다. 따라서 무결성을 보장하기 위해 수신자와 공유하는 데이터의 체크섬을 생성하는 해싱 알고리즘이 필요합니다.

MessageDigest 클래스를 사용하여 MD5 체크섬을 생성하는 방법과 해당 메서드를 이해했습니다. 데이터를 청크로 읽을 때 잘못된 결과가 나오지 않도록 주의하는 것이 가장 좋습니다.