SecureRandom과 Random 클래스?결론적으로 먼저 말하면, 다음과 같이 정리할 수 있다.
특성 RandomSecureRandom용도 일반적인 난수 생성 보안적이고 예측 불가능한 난수 생성 성능 빠름 느림 (보안에 더 많은 시간과 자원 소비) 사용 예 게임, 테스트 데이터 생성, 샘플링 암호화, 인증 토큰, 보안 프로토콜 등 보안성 보안적이지 않음 보안적으로 안전
Random 클래스는 Java에서 일반적인 난수를 생성하기 위해 사용됩니다. 이는 주로 게임, 시뮬레이션, 테스트 등에 사용되는 난수를 생성하는 데 적합합니다.
일반적인 난수 생성: Random 클래스는 의사 난수를 생성합니다. 즉, 특정 알고리즘을 사용해 난수를 생성하지만, 알고리즘이 예측 가능한 특성을 가질 수 있습니다.
속도가 빠르고, 일반적인 용도로 충분한 수준의 난수를 생성
import java.util.Random;
public class RandomExample {
public static void main(String[] args) {
Random random = new Random();
int randomInt = random.nextInt(100); // 0부터 99까지의 난수
System.out.println("Random number: " + randomInt);
}
}
SecureRandom 클래스는 보안 목적의 난수를 생성할 때 사용됩니다. 암호학적으로 안전한 난수를 생성하기 위해 설계되었습니다. 이 난수는 예측할 수 없고 외부 공격에 강한 특성을 가집니다.
주요 특징:
- 암호학적 안전성:
SecureRandom은 암호학적 난수를 생성합니다. 즉, 생성된 난수가 예측되거나 추측되는 것이 매우 어려워 보안적으로 중요한 작업에 적합합니다.- 느림: 보안성을 강화하기 위해 속도가 느릴 수 있습니다. 이는 보안상의 이유로 난수 생성에 더 많은 시스템 자원을 소비할 수 있기 때문입니다.
import java.security.SecureRandom;
public class SecureRandomExample {
public static void main(String[] args) {
SecureRandom secureRandom = new SecureRandom();
int secureRandomInt = secureRandom.nextInt(100); // 0부터 99까지의 난수
System.out.println("Secure Random number: " + secureRandomInt);
}
}