Loading...
Loading...
02-reusable-code-java/05-util/Sha256Util.java
/**
* SHA-256 Base64 해시 유틸리티
* - 문자열을 SHA-256 해시 후 Base64 인코딩하여 반환
* - 비밀번호 해싱, API 서명 등에 활용
*
* @source 260313 car_reservation
* @extracted 2026-03-14
* @description SHA-256 해시 + Base64 인코딩 유틸리티
*
* @dependencies (없음 — JDK 표준 라이브러리만 사용)
*/
package com.example.app.util;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
/**
* SHA-256 해시 유틸리티
* - 입력 문자열을 SHA-256 다이제스트 → Base64 문자열로 변환
* - 외부 API 비밀번호 해싱, 토큰 서명 등에 활용
*/
public class Sha256Util {
private Sha256Util() {
// 유틸리티 클래스 — 인스턴스 생성 방지
}
/**
* 문자열을 SHA-256 해시 후 Base64로 인코딩
*
* @param input 해시할 원본 문자열
* @return Base64 인코딩된 SHA-256 해시값
* @throws NoSuchAlgorithmException SHA-256 알고리즘을 사용할 수 없는 경우
*/
public static String hash(String input) throws NoSuchAlgorithmException {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hashBytes = digest.digest(input.getBytes(StandardCharsets.UTF_8));
return Base64.getEncoder().encodeToString(hashBytes);
}
/**
* 문자열을 SHA-256 해시 후 Hex 문자열로 반환
*
* @param input 해시할 원본 문자열
* @return 16진수(Hex) SHA-256 해시값
* @throws NoSuchAlgorithmException SHA-256 알고리즘을 사용할 수 없는 경우
*/
public static String hashToHex(String input) throws NoSuchAlgorithmException {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hashBytes = digest.digest(input.getBytes(StandardCharsets.UTF_8));
StringBuilder hexString = new StringBuilder();
for (byte b : hashBytes) {
String hex = Integer.toHexString(0xff & b);
if (hex.length() == 1) {
hexString.append('0');
}
hexString.append(hex);
}
return hexString.toString();
}
}