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