2012-10-22 1 views
-1

다음 코드는 바이어스가 있거나없는 난수를 생성합니까?바이어스가없는 다음과 같은 난수 생성이 있습니까?

int numberToGenerate = 20; 
    int rangeUpperLimit = 30; 
    SecureRandom random = SecureRandom.getInstance("SHA1PRNG"); 

    for (int i = 0; i < numberToGenerate; i++) { 
     int randomInt = random.nextInt(rangeUpperLimit); 
     // Do something with it. 
    }   

값은 길이 (30)의 String에서 chars을 선택하기 때문에, 범위 0-29 사용된다. char 값을 선택하는 코드는 질문과 관련이 없으므로 생략됩니다.

+0

의미가있는 예외에 대한 첫 번째 의견은 무엇입니까? 또한'nextInt'에는 이미 상한선이 있으므로'rangeUpperLimit'을 사용해야합니다. –

+0

코드를 제거하고 코드를 수정했습니다. 감사. – speedRS

+0

우선, java 또는 anyother 언어는 의사 랜덤 번호를 생성하지 않습니다. 무작위적인 클래스는 또한 그 숫자들을 생성하기 위해 어떤 논리를 사용하기 때문에, 사실은 무작위 적이 지 않습니다. 그냥 FYI. –

답변

3

확실히 을 의미하며 균일 한 분포 (따라서 편견 없음)를 의미합니다. the documentation :

이 난수 생성 프로그램의 시퀀스에서 추출한 0 이상 (지정된 값) 사이의 균일하게 분포 된 의사 값을 반환합니다.

강력한 암호화 기법 임의의 숫자가 최소한 준수 통계 무작위로 : 발전기 순서는 훌륭하지만 있다고 가정

나는 특히 SecureRandom에 대한 문서 제공, 여기 있도록 합리적인 가정이라고 생각 FIPS 140-2, 암호 모듈에 대한 보안 요구 사항, 4.9.1 절에 명시된 번호 생성기 테스트. 당신은 편견이 염려되는 경우

, 어떤 특정 실행 확인하기 위해 매우 쉽게 될 것이다 -, (말) 삼천만 값을 생성하면 각 번호를 얼마나 많은 시간을 추적하는 방법과 가까이 볼이 양동이 당 백만에 달합니다.

+0

간결하고 유익한 답변. 나는 세대를 테스트 할뿐만 아니라 편향된 숫자를 만들어내는 것에 대해 일정 수준의 확신을 줄 수있는 수단을 제공 할 것입니다. 지금 나는이 일을하는 효율적인 방법에 대해 생각하고 있습니다 :) 다시 한번 감사드립니다. – speedRS

-1

documentation에서 정의에 의해 충분히 균일해야 결과,하지만 당신의 예제에서 당신은 그래서이 편향 될 수 PNRG를 초기화 씨앗를 사용하지 않습니다.

+1

왜 씨앗을 사용하지 않으면 바이어스가 발생합니까? 어쨌든 "편향된"것은 무엇을 의미합니까? (이것은 'SecureRandom'이며, 좋은 접근법을 얻기 위해 다양한 접근법을 사용할 수 있습니다.) –

+0

'sun.security.provider.SecureRandom'에 의해 내부적으로 사용 된 알고리즘이 그렇게 완벽하게 테스트되지 않았기 때문에. 이 상황에서 예측할 수없는 정보를 얻게되면 잠재적 인 문제를 피할 수 있습니다. 대체로 정확한 용어는 아니지만 나는 말할지도 모른다. – Jack

+1

씨앗의 무작위성이 왜 편견을 말하는지 당신이 왜 생각하는지 아직도 나는 알지 못합니다. 다른 방법으로 보안에 영향을 미치지 만, prng 시퀀스는 완전히 예측 가능할지라도 편향 될 수 있습니다. –