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 체크섬을 생성하는 방법과 해당 메서드를 이해했습니다. 데이터를 청크로 읽을 때 잘못된 결과가 나오지 않도록 주의하는 것이 가장 좋습니다.