10930번: SHA-256
첫째 줄에 문자열 S가 주어진다. S는 알파벳 대문자와 소문자, 그리고 숫자로만 이루어져 있으며, 길이는 최대 50이다.
www.acmicpc.net
문제제목 : SHA-256
문제난이도 : 브론드2 (하)
문제유형 : 해싱
해당 문제는 오프라인 코딩테스트보다는 온라인 코딩테스트에서 나올 수 있음.
문제
문자열 S가 주어졌을 때, SHA-256 해시값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 문자열 S가 주어진다. S는 알파벳 대문자와 소문자, 그리고 숫자로만 이루어져 있으며, 길이는 최대 50이다.
출력
첫째 줄에 S의 SHA-256 해시값을 출력한다.
코드
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Scanner;
public class BOJ10930_SHA256 {
public static byte[] sha256(String msg) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("SHA-256"); //객체 생성
md.update(msg.getBytes()); // 입력값을 줄 때(String을 byte형으로 전환)
return md.digest(); // 결과값 : 해쉬값 호출
}
public static String bytesToHex1(byte[] bytes) {
StringBuilder builder = new StringBuilder();
for (byte b : bytes) {
builder.append(String.format("%02x", b));
}
return builder.toString();
}
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(bytesToHex1(sha256(str)));
}
}
아이디어
1. 어떤 문제인가?
문자열에 대한 SHA-256 해시값을 구하는 문제이다.
2. SHA-256 해시를 어떻게 하는지 검색을 하여 찾아본다.
문제를 풀면서 검색도 했지만, 4학년 1학기 네트워크보안이라는 과목에서 배운 것이 떠올랐다.
물론 배웠다고해서 보지도 않고 코드를 작성한 건 아니고 그 당시 ppt를 다시 읽고 처음 배웠을 때보다 익숙한 상태로 코드를 작성했더니 더 수월한 느낌을 받았다.
추가학습
1) java.security.MessageDigest
해당 라이브러리는 SHA나 MD2, MD5 등 여러 해시 알고리즘을 제공해준다.
해시를 한 결과값은 byte형으로 반환된다.
2) String -> byte[]로
str.getBytes(); //문자를 byte로 가져와서 배열[]에 byte 타입으로 넣는다.
3. String.format("%02x", b)
1. %d : 10진수(정수
2. %x or %X: 16진수
3. %o : 8진수
4. %f : 실수
'코딩테스트 준비 > JAVA 코테' 카테고리의 다른 글
백준 1655. 가운데를 말해요 (0) | 2021.03.03 |
---|---|
백준 1920. 수찾기 (HashSet) (0) | 2021.03.02 |
문제 풀이 라이브러리, 클래스 추가 (0) | 2021.03.01 |
백준 11729. 하노이 탑 이동 순서 (0) | 2021.03.01 |
백준 2750. 수 정렬하기 (0) | 2021.02.28 |
댓글