개발 이모저모
랜덤키 생성하기, SecureRandom()
진진이랑
2025. 1. 7. 08:05
728x90
반응형
웹 개발을 하다보면, 보안 키를 생성해야하는 경우가 있다.
그래서 랜덤키를 생성해주는 class를 생성하여 어디서든 접근하여 키를 쉽게 생성할 수 있도록 했다.
클래스 정의
public class KeyGenerationUtil {
private final String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
/**
* 랜덤키 생성
* sessionToken, authToken에 사용
* @param length
* @return
*/
public String generateSecureRandomString(int length) {
SecureRandom random = new SecureRandom();
StringBuilder sb = new StringBuilder(length);
for (int i = 0; i < length; i++) {
int randomIndex = random.nextInt(CHARACTERS.length());
sb.append(CHARACTERS.charAt(randomIndex));
}
return sb.toString();
}
}
SecureRandom은 자바에서 암호학적으로 안전한 난수를 생성하기 위한 클래스이다. 보안이 중요한 응용프로그램에서 랜덤 값을 생성하기 위해 사용된다.
SecureRandom은 Random클래스와 다르게 예측 가능한 난수를 생성하지 않도록 설계되어 좀 더 보안성이 좋아 비밀번호, 토큰, 인증 키, 세션ID와 같이 보안에 민감한 작업에 사용된다.
nextInt()는 0~21억 사이의 정수에서 난수를 반환해준다.
사용 예시
String randomKey = KeyGenerationUtil.generateSecureRandomString(16);
System.out.println("Generated Key: " + randomKey);
해당 소스는 간단하게 Static을 통해 구성하는 방식의 예제이다. @Component로 Spring Bean등록하여 사용하는 방법도 있지만 더 간단하게 사용하는 방법을 우선 적용해보았다.
Static 방식으로 구성을 하면 Spring Container에 Bean 등록을 하지 않아도 되기 때문에 별도 관리 부담이 없어 가볍다. 그리고 클래스 이름으로 직접적으로 접근이 가능하고 독립적으로 사용 가능하다.
하지만 이렇게 Static 방식으로 구성하면 메서드 로직을 동적으로 변경하기 어렵다. 또한, static은 상태를 가질 때 동시성 문제가 발생할 수 있어서 글로벌 상태관리 문제가 발생할 수 있다.
그래서 이러한 구성은 단순히 랜덤 키만 생성하고, 코드가 간단하길 원한다면 static방식이 적합하다!!
728x90
반응형