2014-02-27 4 views
1

mt_rand & mt_srand를 많이 사용하는 응용 프로그램이 있습니다. 문제는 많은 호스트 공급자가 기본적으로 suhosin.mt_srand.ignore를 활성화하여 응용 프로그램이 제대로 작동하지 않는 것입니다. 왜냐하면 시드가 ' t 작업은 ... 내 자신의 mt_rand() & mt_srand를 작성하는 방법?

내 응용 프로그램은 이미 내가 PHP에서, 내 자신의에는, mt_rand & mt_srand 기능을 만들려는 것 (이 확장을 사용하지 않는 것이), 그리고 그들을 같은을 반환이 일부 호스팅 서버에서 실행되기 때문에 결과가 (내장 된 기능과 동일한 씨앗에 대해) 호스트 공급자가이 확장 기능을 사용하는지 여부에 따라 달라지지 않습니다.

가 나는에는, mt_rand의 소스 코드() & mt_srand()이다 rand.c (http://lxr.php.net/xref/PHP_5_4/ext/standard/rand.c), 보았다,하지만 C의 내 지식은 가난, 그리고 나는 그것이 나 자신에 의해 PHP로 마이그레이션 할 수 없습니다했습니다.

누구나 어떻게 할 수 있는지 알고 있습니까? 또는 그걸 도와 줄래?

+0

이렇게하면 안됩니다. 좋은 난수 생성은 매우 복잡합니다. 당신이 주장하지만,이 질문을 참조하십시오 : http://stackoverflow.com/questions/9482290/workaround-for-suhosin-mt-srand-ignore-to-consistently-shuffle-an-array-in-php –

+0

난 ' 이미이 질문을 보았습니다. 캐싱과 다른 무작위 함수 모두는 내 응용 프로그램에서 생성되는 모든 시드가 무엇인지 미리 말할 수 없기 때문에 내 경우에는 수행하지 않으며 mt_rand & mt_srand와 동일한 결과를 생성하는 임의의 함수가 필요합니다. 이전 버전과의 호환성을 위해 제작되었습니다. –

+0

언급 된 @EdCottrell 질문은 어떤 경우에도 세계 최대의 PRNG를 갖고 있지는 않습니다. – abligh

답변

0

일반적인 PRNG 알고리즘의 PHP 전용 구현을 시도해 볼 수 있습니다 (예 : https://github.com/ruafozy/php-mersenne-twister

그러나이 숫자를 암호화 방식으로 사용해서는 안됩니다. 예를 들면 다음과 같습니다. 게임에서 무작위로 미로를 생성했지만 일기를 암호화하는 것은 아닙니다.

관련 문제