package com.takensoft.common.util; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.Base64; import java.util.Base64.Encoder; import java.util.Base64.Decoder; /** * @author : takensoft * @since : 2025.01.22 * @modification * since | author | description * 2025.01.22 | takensoft | 최초 등록 * * 암호화 및 복호화 작업을 수행하는 유틸리티 */ @Component public class Secret { private static final Charset UTF_8 = StandardCharsets.UTF_8; // UTF-8 문자셋 private static String SECRET_KEY; // 암호화 키 private static String VECTOR_KEY; // 복호화 키 /** * @param secret - 암호화 키 (application.yml에서 값을 읽어 옴) * @param vector - 복호화 키 (application.yml에서 값을 읽어 옴) * * 기본 생성자 */ public Secret(@Value("${crypto.secret}")String secret, @Value("${crypto.vector}")String vector) { this.SECRET_KEY = secret; this.VECTOR_KEY = vector; } /** * @param data - 암호화할 데이터 * @return 암호화된 데이터 (Base64로 인코딩된 문자열) * * 암호화 */ public static String encrypt(String data) { Encoder encoder = Base64.getEncoder(); byte[] message = data.getBytes(UTF_8); byte[] encryptedData = KISA_SEED_CBC.SEED_CBC_Encrypt(SECRET_KEY.getBytes(), VECTOR_KEY.getBytes(), message, 0, message.length); return new String(encoder.encode(encryptedData), UTF_8); } /** * @param encryptedData - 복호화할 암호화된 데이터 (Base64로 인코딩된 문자열) * @return 복호화된 원본 데이터 * * 복호화 */ public static String decrypt(String encryptedData) { Decoder decoder = Base64.getDecoder(); byte[] message = decoder.decode(encryptedData); byte[] decryptedData = KISA_SEED_CBC.SEED_CBC_Decrypt(SECRET_KEY.getBytes(), VECTOR_KEY.getBytes(), message, 0, message.length); return new String(decryptedData, UTF_8); } }