어제 오늘 내일

[Java] 랜덤 문자열 생성하기 본문

IT/Java

[Java] 랜덤 문자열 생성하기

hi.anna 2025. 3. 21. 06:13

Java에서 랜덤 문자열 생성 방법

Java에서 영문자, 숫자, 특수 문자 등으로 이루어진 랜덤 문자열을 생성하는 방법을 살펴보겠습니다.

 

1. Random 클래스를 이용한 랜덤 문자열 생성 (기본 방법)

import java.util.Random;

public class RandomStringGenerator {
    public static void main(String[] args) {
        int length = 10; // 원하는 문자열 길이
        String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; // 사용 가능한 문자
        StringBuilder sb = new StringBuilder();
        Random random = new Random();

        for (int i = 0; i < length; i++) {
            int index = random.nextInt(characters.length()); // 랜덤 인덱스 선택
            sb.append(characters.charAt(index));
        }

        System.out.println("랜덤 문자열: " + sb.toString());
    }
}

출력 예시

랜덤 문자열: Xy9aZ3LmQp

설명

  1. characters → 사용할 문자들(영문 대소문자 + 숫자).
  2. random.nextInt(characters.length()) → 문자열에서 랜덤한 문자 선택.
  3. StringBuilder를 사용하여 랜덤하게 선택된 문자들을 추가.

 

 

2. UUID를 이용한 랜덤 문자열 생성

UUID (Universally Unique Identifier) 는 중복 가능성이 극히 낮은 고유 문자열을 생성하는 데 사용됩니다.

import java.util.UUID;

public class UUIDExample {
    public static void main(String[] args) {
        String randomUUID = UUID.randomUUID().toString();
        System.out.println("랜덤 UUID: " + randomUUID);

        // 하이픈 제거한 짧은 버전
        String shortUUID = randomUUID.replace("-", "");
        System.out.println("짧은 랜덤 문자열: " + shortUUID);
    }
}

출력 예시

랜덤 UUID: 4b1e2a64-5c39-4c9e-b1d6-48a9d06cb8e5
짧은 랜덤 문자열: 4b1e2a645c394c9eb1d648a9d06cb8e5

설명

  1. UUID.randomUUID().toString() → 고유한 UUID 생성하여 문자열로 변환
    • UUID는 32자리 16진수(09, af)와 4개의 하이픈(-)으로 이루어진 36자리 문자열.
    • 형식: 8-4-4-4-12 (하이픈 포함)
  2. .replace("-", "") → UUID에서 모든 -(하이픈)을 제거.

 

 

3. SecureRandom을 이용한 보안성이 높은 랜덤 문자열 생성

SecureRandom은 일반 Random보다 예측 불가능한 난수를 생성합니다.

import java.security.SecureRandom;

public class SecureRandomString {
    public static void main(String[] args) {
        int length = 12;
        String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*";
        StringBuilder sb = new StringBuilder();
        SecureRandom secureRandom = new SecureRandom();

        for (int i = 0; i < length; i++) {
            int index = secureRandom.nextInt(characters.length());
            sb.append(characters.charAt(index));
        }

        System.out.println("보안 랜덤 문자열: " + sb.toString());
    }
}

출력 예시

보안 랜덤 문자열: A8#b$LmZ9Qp*

 

 

4. Apache Commons Lang 라이브러리 사용 

Apache Commons Lang의 RandomStringUtils 클래스를 사용하면 매우 쉽게 랜덤 문자열을 생성할 수 있습니다.

1) Maven 의존성 추가

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version>
</dependency>

2) 코드 구현

import org.apache.commons.lang3.RandomStringUtils;

public class ApacheRandomString {
    public static void main(String[] args) {
        // 10자리의 알파벳 + 숫자 조합 랜덤 문자열 생성
        String randomString = RandomStringUtils.randomAlphanumeric(10);
        System.out.println("Apache 랜덤 문자열: " + randomString);
    }
}

출력 예시

Apache 랜덤 문자열: A1bX9ZLmQp

 

 

설명

  1. RandomStringUtils 클래스는
    • Apache Commons Lang 3 라이브러리에서 제공하는 유틸리티 클래스.
    • 기본적인 난수 생성보다 간편하고 강력한 기능 제공.
  2. RandomStringUtils.randomAlphanumeric(10)
    • 10자리의 랜덤 문자열 생성.
    • 영문 대소문자(A-Z, a-z) + 숫자(0-9) 포함.

 

 

5. 비밀번호 생성기 (영문자 + 숫자 + 특수문자 포함)

이 코드는 대문자, 소문자, 숫자, 특수문자를 포함하는 랜덤 비밀번호를 생성하는 Java 프로그램입니다.

import java.security.SecureRandom;

public class RandomPasswordGenerator {

    // 사용 가능한 문자집합 정의 (대문자, 소문자, 숫자, 특수문자)
    private static final String UPPERCASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    private static final String LOWERCASE = "abcdefghijklmnopqrstuvwxyz";
    private static final String DIGITS = "0123456789";
    private static final String SPECIAL_CHARACTERS = "!@#$%^&*()_+[]{}|;:,.<>?";
    private static final String ALL_CHARACTERS = UPPERCASE + LOWERCASE + DIGITS + SPECIAL_CHARACTERS;

    public static String generatePassword(int length) {
        // SecureRandom은 일반 Random보다 보안성이 높은 난수를 생성함.
        SecureRandom random = new SecureRandom();
        StringBuilder password = new StringBuilder();

        // 최소 1개씩 포함
        password.append(UPPERCASE.charAt(random.nextInt(UPPERCASE.length())));
        password.append(LOWERCASE.charAt(random.nextInt(LOWERCASE.length())));
        password.append(DIGITS.charAt(random.nextInt(DIGITS.length())));
        password.append(SPECIAL_CHARACTERS.charAt(random.nextInt(SPECIAL_CHARACTERS.length())));

        // 나머지 랜덤 채우기
        for (int i = 4; i < length; i++) {
            password.append(ALL_CHARACTERS.charAt(random.nextInt(ALL_CHARACTERS.length())));
        }

        // 문자열 섞기 (랜덤 정렬)
        char[] passwordArray = password.toString().toCharArray();
        for (int i = passwordArray.length - 1; i > 0; i--) {
            int j = random.nextInt(i + 1);
            char temp = passwordArray[i];
            passwordArray[i] = passwordArray[j];
            passwordArray[j] = temp;
        }

        return new String(passwordArray);
    }

    public static void main(String[] args) {
        String password = generatePassword(12);
        System.out.println("랜덤 비밀번호: " + password);
    }
}

출력 예시

랜덤 비밀번호: G8!mZb@9QxLp

설명

  1. SecureRandom을 사용하여 보안성이 높은 랜덤 문자열 생성.
  2. 대문자, 소문자, 숫자, 특수문자를 최소 1개 이상 포함.
  3. 비밀번호를 섞어서 패턴을 없애고 더 강력한 보안 제공.
  4. 비밀번호 길이는 generatePassword(int length)를 통해 조정 가능.

 

반응형
Comments