M

Random, SecureRandom 본문

Java

Random, SecureRandom

M_master 2022. 2. 15. 17:16

컴퓨터는 기본적으로 정해진 입력에 따라 정해진 값을 낼 뿐이여서 난수를 만들 수 없다. 이를 해결하기 위해 난수 생성 알고리즘을 이용해 난수를 생성한다.

 

public static void main(String[] args) {
        Random ra = new Random();
        ra.setSeed(11);

        for(int i = 0; i < 10; i++) {
            System.out.print(ra.nextInt(20) +" ");
        }
}

-> 18 8 11 15 13 7 0 13 13 7

seed(시드)에서 같은 값을 주고 있기 때문에 코드를 재실행 시켜도 아래와 똑같은 결과가 출력이 된다.

 

따라서 씨앗 값을 대표적으로 현재시간을 이용해 난수가 계속 바뀌도록 설정을 한다.

public static void main(String[] args) {
    SecureRandom ra = new SecureRandom();
    ra.setSeed(new Date().getTime());

    for(int i = 0; i < 10; i++) {
        System.out.print(ra.nextInt(20) +" ");
    }
}

 

Random과 SecureRandom의 차이점

 

java.util.Random

- 48비트를 포함

- 시스템의 시간을 통해 시드로 사용하거나 시드를 생성 (보안에 취약 : 공격자가 시드가 생성 된 시간을 알고 있으면 쉽게 재현이 가능)

 

java.security.SecureRandom

- 최대 128비트를 포함

- OS에서 임의 데이터를 가져와서 이를 시드로 사용

- SHA1을 사용하여 의사 난수를 생성하는 SHA1PRNG 알고리즘을 구현

728x90

'Java' 카테고리의 다른 글

Java - for문 종류  (0) 2024.04.02
Spring 폴더 구조  (0) 2022.05.27
BufferedReader 와 BufferedWriter  (0) 2021.09.10
Java 설치  (0) 2019.11.09