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

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

jini:) 2023. 12. 26. 09:52
728x90
반응형
해커랭크 - https://www.hackerrank.com/
Prepare > Java > Advanced > Java SHA-256
 

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

 

 

암호화 해시 함수는 디지털 데이터에서 실행되는 수학 연산입니다. 계산된 해시(즉, 해싱 알고리즘을 실행하여 생성된 출력)를 알려진 예상 해시 값과 비교하여 사람이 데이터의 무결성을 결정할 수 있습니다. 예를 들어 다운로드한 파일의 해시를 계산하고 그 결과를 이전에 게시된 해시 결과와 비교하면 다운로드가 수정되었거나 변조되었는지 여부를 알 수 있습니다. 또한 암호화 해시 함수는 충돌에 매우 강합니다. 즉, 암호화 해시 함수를 사용하여 두 개의 서로 다른 입력 값에서 동일한 해시 출력을 생성하는 것은 극히 어려울 것입니다.

SHA-2(Secure Hash Algorithm 2)는 NSA(National Security Agency)에서 설계한 암호화 해시 함수 집합입니다. 다이제스트 크기가 가변적인 6개의 동일한 해싱 알고리즘(SHA-256, SHA-512, SHA-224, SHA-384, SHA-512/224, SHA-512/256)으로 구성됩니다. SHA-256은 최대 264 - 1비트의 입력에 대한 해시 코드를 계산할 수 있는 256비트(32바이트) 해싱 알고리즘입니다. 64번의 해싱을 거쳐 64자리 16진수인 해시 코드를 계산합니다.

문자열 s가 주어지면 SHA-256 해시 값을 인쇄합니다.

 

Input Format

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

 

Constraints

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

 

Output Format

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

 

Sample Input 0

HelloWorld

 

Sample Output 0

872e4e50ce9990d8b041330c47c9ddd11bec6b503ae9386a99da8584e9bb12c4

 

Sample Input 1

Javarmi123

 

Sample Output 1

f1d5f8d75bb55c777207c251d07d9091dc10fe7d6682db869106aacb4b7df678

 

반응형

 

Code

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

public class Solution {
    static String sha256(String s) {
        java.security.MessageDigest md;
        try { md = java.security.MessageDigest.getInstance("SHA-256"); }
        catch (Exception e) { return null; }
        md.update(s.getBytes());
        String result = (new java.math.BigInteger(1, md.digest())).toString(16);
        while(result.length() < 64) { 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(sha256(str));
    }
}

 

 

SHA-256
Secure Hash Algorithm 256-bit의 약자.
Java.security.MessageDigest 클래스를 사용해서 구현.
주어진 데이터를 고정된 크기의 암호학적인 해시 값으로 변환하는 해시 함수.
256비트 길이의 해시 값을 생성.
원본 데이터의 작은 변화에도 완전히 다른 해시 값을 만듦.
주로 데이터 무결성 확인, 디지털 서명, 패스워드 저장 등에 사용.

장점
1. 보안 강도 : 안전하고 강력한 해시 함수. 일반적인 공격에 강건한 보안 수준을 제공.
2. 고정된 출력 크기 : 항상 256비트(32바이트)의 고정된 출력 값을 생성. 데이터 길이에 상관없이 동일한 크기의 해시 값을 얻음.
3. 계산 속도 : 일반적으로 빠른 속도로 해시 값을 생성.

단점
1. 충돌 가능성 : 해시 충돌은 두 개의 서로 다른 입력값이 동일한 해시 값을 갖는 상황을 의미. 이론적으로 가능성은 낮지만, 공격자가 충돌을 만들어 내는 것이 일부 상황에서 가능할 수 있음.
2. 무작위 문자열과 충돌 가능성 : 일부 입력값에서는 특히 무작위 한 데이터에서 SHA-256이 충돌할 가능성이 있음.
3. 하드웨어 공격에 취약 : 특정 하드웨어 구성에서는 SHA-256 알고리즘이 빠른 속도를 보이는 반면, 다른 하드웨어에서는 성능이 저하될 수 있음.

 

 

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

 

 

 

728x90
반응형