내 안드로이드 클라이언트와 Server (Servlet)에서 난수를 얻고 있습니다. 클라이언트와 서버 모두에서 동일한 SecureRandom 알고리즘 ("SHA1PRNG")을 사용하고 있습니다. 내 시드 값은 둘 다 동일합니다. 하지만 출력 숫자는 클라이언트뿐만 아니라 서버에서도 다릅니다. 그 이유는 무엇일까요?SecureRandom number의 알고리즘
SecureRandom random = new SecureRandom();
try {
random.getInstance("SHA1PRNG");
} catch (Exception e) {
// ...
}
;
random.setSeed(1097327);
byte[] b1 = new byte[3];
random.nextBytes(b1);
long value = 0;
for (int i = 0; i < b1.length; i++) {
value += (b1[i] & 0xff) << (8 * i);
Toast.makeText(getApplicationContext(), Long.toString(value),
Toast.LENGTH_LONG).show();
}
Android에서 보안 랜덤 넘버 생성기를 사용하고 동일한 시드 인스턴스를 두 번 사용하면 같은 난수가 두 번 나타납니다. 서블릿에서 동일한 작업을 수행했을 때 두 개의 동일한 시드에 대해 두 개의 동일한 난수가 있습니다. 하지만 문제는 난수입니다 ** 안드로이드는 서블릿의 난수와 같지 않습니다 ** – suraj
Android 플랫폼과 서블릿에서 사용되는 JDK의 구현은 약간 씩 다를 수 있습니다. 그러나 요점은 남아 있습니다 : 여러 플랫폼에서 숫자의 예측 가능한 순서를 얻기 위해, 계약에 의해 가능한 한 안전하게 무작위로 숫자를 생성해야하는 클래스를 사용하는 것은 좋은 생각이 아닙니다. 계약에 따라 시드를 사용하여 예측 가능한 시퀀스를 생성하거나 측면 중 하나에 숫자를 생성하고 다른 측면과 공유하는 자체 알고리즘을 사용해보십시오. –
오케이. 나는 그것을 고려할 것이다. 고맙습니다. 너 정말 멋지다. – suraj