새소식

Java/Spring

Spring - 랜덤 인증번호 생성기

  • -

개요

프로젝트를 진행하던 중 흔히들 사용하는 랜덤 인증번호 생성 프로세스가 필요해 작성해보았다.
생성되는 인증번호는 영어 소문자와 숫자의 조합이다. (인증번호에 대소문자 구분하는 것 만큼 짜증나는 것이 없기에...)


코드

import java.security.SecureRandom;

/**
 * 랜덤 인증번호 생성 클래스
 */
public class RandomAuthCode {
    // 인증 코드에 사용될 문자들
    private static final String CHARACTERS = "abcdefghijklmnopqrstuvwxyz0123456789";
    // 인증 코드의 길이 (6자리)
    private static final int CODE_LENGTH = 6;
    // 보안 강화를 위한 SecureRandom 사용
    private static final SecureRandom RANDOM = new SecureRandom();

    /**
     * 인증 코드를 생성하는 메소드
     *
     * @return 생성된 인증 코드 (Ex. wu2mf9)
     */
    public static String generate() {
        StringBuilder code = new StringBuilder(CODE_LENGTH);
        // 지정된 길이만큼 랜덤 문자를 선택하여 인증 코드 생성
        for (int i = 0; i < CODE_LENGTH; i++) {
            // CHARACTERS에서 랜덤하게 문자를 선택하여 코드에 추가
            code.append(CHARACTERS.charAt(RANDOM.nextInt(CHARACTERS.length())));
        }
        return code.toString(); // 생성된 인증 코드를 문자열로 반환
    }
}

사용

@AllArgsConstructor
public class ExamService {
    private final RandomAuthCode randomAuthCode;

    public void example(){
        String authCode = randomAuthCode.generate();
    }
}

Random 클래스와 SecureRandom 클래스의 차이

Random

  • 목적: 일반적인 용도의 난수 생성
  • 사용 사례: 시뮬레이션, 게임, 비과학적 계산 등 보안이 중요하지 않은 경우
  • 알고리즘: 선형 합동 생성기(Linear Congruential Generator, LCG) - 빠르고 메모리 효율적이지만, 예측 가능성이 높다

SecureRandom

  • 목적: 보안이 중요한 용도의 난수 생성
  • 사용 사례: 암호화 키, 보안 토큰, 패스워드 생성 등 보안이 중요한 경우
  • 알고리즘: 암호화 강도(cryptographically strong) 난수 생성기 - 운영체제에 따라 다른 알고리즘을 사용할 수 있으며, 기본적으로 매우 예측하기 어렵도록 설계되어 있음

랜덤 닉네임 생성은?

 

Spring - 랜덤 닉네임 생성기

개요프로젝트를 진행하던 중 랜덤으로 닉네임을 생성해주는 프로세스가 필요해 작성해보았다.코드import lombok.AllArgsConstructor;import org.springframework.stereotype.Component;import java.text.MessageFormat;import java.

dev-kimchi.tistory.com

 

728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.