2013-08-04 6 views
0

정확히 내 질문은 아니지만 stackoverflow에 비슷한 질문이있었습니다.SHA를 여러 번 사용하여 임의의 숫자 생성

그래서 일련 번호가 있습니다 (1부터 ~ 5,000,000까지) (이 번호는 N이라고합니다). 모든 숫자를 [0, 99]의 숫자로 매핑하고 싶습니다. 한 가지 해결책은 N을 100으로 나눈 것을 기억하는 것입니다. 나는 이것을 다시 한 번 두 번하고 [0, 99]에서 N이 매핑되는 번호를보고 싶습니다. 유일한 요구 사항은 N이 [0, 99] (예 : 34)의 숫자에 매핑 된 정보가 처음으로 두 번째 매핑 된 번호에 대해 결정해서는 안된다는 것입니다.

그래서 나는이 처음에 (SHA (N + 1) 100 %) 및 (SHA (N + 2) ~ 100 %)는 두 번째 시간 ..

그것을 보장하고 싶지 일하다 ? 또는 나는 무엇인가 놓치고 있냐?

간단히 말하자면 : 임의의 두 x1, x2를 [0, 99]에서 가져옵니다. 첫 번째로 x1로 매핑되고 두 번째로 x2로 매핑되는 [0, 5000000]의 모든 수를 계산합니다. 이 수는 x1, x2의 선택에 대해 (어느 정도) 동일 할 것입니까?

답변

1

n, SHA1(N+1)%100SHA1(N+2)%100의 5 백만 값에 대한 결과를 계산 한 다음 통계 패키지를 통해 실행했습니다. SHA 결과의 세트를 균일하게 0과 99 사이에 분포하고, 상기 상관 행렬이었다

  n  sha+1 sha+2 
    n 1.0000 -0.0016 -0.0016 
sha+1 -0.0016 1.0000 -0.0001 
sha+2 -0.0016 -0.0001 1.0000 

즉, SHA 결과 서로 효과적으로 무상관. 첫 번째 SHA 계산에서 주어진 0-99는 0-99 중 하나와 쌍을 이루며 두 번째 SHA 결과와 세트에서 동일하게 나타날 가능성이 큽니다.

+0

감사합니다. 나는 비슷한 테스트를 수행했으며 만족 스럽습니다. – nagavamsikrishna