> 개발-IT-인터넷/> JAVA

[해커랭크(HackerRank) JAVA 풀이] - Java MD5

jini:) 2023. 12. 21. 09:20
728x90
반응형
해커랭크 - https://www.hackerrank.com/
Prepare > Java > Advanced > Java MD5
 

HackerRank

HackerRank is the market-leading technical assessment and remote interview solution for hiring developers. Learn how to hire technical talent from anywhere!

www.hackerrank.com

 

 

MD5(Message-Digest algorithm 5)는 128-bit 해시 값을 가진 널리 사용되는 암호화 해시 함수입니다. 다음은 MD5의 몇 가지 일반적인 용도입니다.

  • 암호의 단방향 해시를 저장합니다.
  • 전송된 파일이 손상되지 않고 도착했다는 확신을 제공하기 위해.

MD5는 MIT의 Ronald Rivest 교수가 설계한 일련의 메시지 요약 알고리즘 중 하나입니다(Rivest, 1994). 그러나 MD5의 보안은 2012년에 가장 악명 높은 Flame 악성코드로 인해 심각하게 손상되었습니다. CMU 소프트웨어 엔지니어링 연구소는 기본적으로 MD5를 "암호화 방식으로 손상되어 향후 사용에 부적합"한 것으로 간주합니다.

암호를 나타내는 영숫자 문자열 s가 주어지면 MD5 암호화 값을 계산하고 인쇄합니다.

 

Input Format

s를 나타내는 단일 영숫자 문자열입니다.

 

Constraints

  • 6 ≤ |s| ≤ 20
  • 문자열 s는 영어 알파벳 문자(즉, [a - zA - Z] 및/또는 10진수(즉, 0 - 9))로만 구성됩니다.

 

Output Format

새 줄에 s의 MD5 암호화 값을 인쇄합니다.

 

Sample Input 0

HelloWorld

 

Sample Output 0

68e109f0f40ca72a15e05cc22786f8e6

 

Sample Input 1

Javarmi123

 

Sample Output 1

2da2d1e0ce7b4951a858ed2d547ef485

 

반응형

 

Code

import java.io.*;
import java.util.*;

public class Solution {
    static String md5(String s) {
        java.security.MessageDigest md;
        try { md = java.security.MessageDigest.getInstance("MD5"); }
        catch (Exception e) { return null; }
        md.update(s.getBytes());
        String result = (new java.math.BigInteger(1, md.digest())).toString(16);
        while(result.length()<32) { result = "0" + result; }
        return result;
    }

    public static void main(String[] args) {
        /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        System.out.println( md5(str) );
    }
}

 

 

MD5
java.security.MessageDigest 클래스를 사용하여 MD5 해싱을 수행.
생성된 해시값은 입력된 데이터가 같으면 항상 동일한 값을 가짐.
데이터 무결성 검사와 식별에 활용.
보안상의 이유로 MD5는 취약점을 가지고 있어 주의 필요.

MD5 해싱 단계
1. MessageDigest 객체 생성 : java.security.MessageDigest.getInstance("MD5")를 사용하여 MD5 해싱을 위한 MessageDigest 객체를 생성.
2. 해싱 수행 : update() 메소드를 사용하여 해싱하려는 데이터를 바이트 배열로 변환, 생성된 MessageDigest 객체에 업데이트.
3. 해시값 얻기 : digest()를 호출하여 최종 해시 값을 얻음. 이 값은 바이트 배열로 제공, 원하는 형식으로 변환하여 사용. 주로 16진수나 Base64 등의 형식으로 변환하여 표현.
4. 결과 출력 : 해시값을 적절한 형식으로 변환하여 사용자에게 제공하거나 저장.

MD5보다 안전한 해시 알고리즘
1. SHA-256 (Secure Hash Algorithm 256-bit) : 256비트의 고정 길이 해시 값을 생성. 보안에 더 강력하나 표준으로 사용. java.security.MessageDigest.getInstance("SHA-256")를 사용하여 사용 가능.
2. SHA-3 (Secure Hash Algorithm 3) : NIST에 의해 발표된 해시 알고리즘. SHA-256과 비슷하지만 완전히 다른 설계로 이루어짐. 안전성과 보안성을 고려하여 설계. 최신 보안 요구 사항을 충족시키기 위해 고안. Java 9부터 SHA3 알고리즘을 지원. MessageDigest.getInstance("SHA3-256")를 사용하여 사용 가능.
3. bcrypt, Argon2, scrypt 등의 알고리즘 : 주로 비밀번호 해싱에 사용. 단순한 해시 함수보다 더 강력한 보안 메커니즘을 제공하여 비밀번호 보안을 강화. bcrypt는 Java에서 BCrypt 라이브러리를 통해 사용 가능. Argon2 및 scrypt는 외부 라이브러리르 통해 Java에서 사용 가능. 

 

 

개인 공부를 위한 포스팅입니다.
모든 번역, 코드는 완벽하지 않을 수 있습니다.

 

 

 

728x90
반응형