Узнайте то, с чем был отобран генератор случайных чисел в C++

Кроме того, не действительно уверенный, если я прямо здесь. Но ADO.NET всегда работает 'офлайн' с Вашими данными. Я думаю, что LINQ2SQL работает онлайн с Вашими данными.

5
задан Brian 27 August 2009 в 19:30
поделиться

4 ответа

The seed is not required to be stored, only the last random number returned is.

Here's the example from the manpage:

       static unsigned long next = 1;

       /* RAND_MAX assumed to be 32767 */
       int myrand(void) {
           next = next * 1103515245 + 12345;
           return((unsigned)(next/65536) % 32768);
       }

       void mysrand(unsigned seed) {
           next = seed;
       }
7
ответ дан 13 December 2019 в 22:12
поделиться

Теоретически нет - начальное значение используется для вычисления следующего случайного значения, и это значение (теоретически) используется для начального значения следующего случайного числа и так далее.

С точки зрения безопасности возможность заглянуть в семя (будь то исходное или новое) - серьезная проблема безопасности, поэтому я полагаю, что вы не сможете изучить его, даже если оно должно где-то храниться.

0
ответ дан 13 December 2019 в 22:12
поделиться

If you have a simple linear congruential generator, for which you have several values this yields a system of equations:

 v1 = ( seed * a + b ) % m
 v2 = (   v1 * a + b ) % m;
 v3 = (   v2 * a + b ) % m;
... 

If you know the first value, you can go backwards in the sequence:

seed = (v1 - b)/a (mod m)

You don't know the seed uniquely, you only know it mod m (which is usually fine since (0 < seed < m) anyways) If v1 - b is negative you need to add m's until its positive again.

You might also look at the Chinese Remainder Theorem, though its not an exact match.

3
ответ дан 13 December 2019 в 22:12
поделиться

Я не знаю, каков ваш уровень владения сборкой и есть ли у вас доступ к исходному коду / символам отладки для неуправляемого приложения, но кроме такого рода уловок, нет реального способа определить исходное начальное значение. Вся суть генераторов случайных чисел состоит в том, чтобы придумать способ давать вам непредсказуемые числа - отношения между любыми двумя заданными вызовами rand () не должны выводиться. В криптографически стойких генераторах псевдослучайных чисел возможность угадать начальное число на основе сгенерированного случайного числа будет считаться серьезной ошибкой.

Самый простой способ сделать это - запустить приложение под отладчиком и установить точку останова, где srand ( ) вызывается - тогда просто посмотрите на переданный параметр.

Затем нужно разобрать приложение и выяснить обстоятельства вызова srand. Вполне возможно, что он засевается с текущим временем - тогда вы можете попробовать несколько предположений (вы, вероятно, можете сузить его до нескольких тысяч или около того) и посмотреть, дает ли какая-либо та же последовательность случайных чисел, которую использует приложение. . (Конечно, это предполагает, что у вас есть способ узнать, какие генерируются случайные значения). Также возможно, что семя все время тупое, вроде «0».

было бы запустить приложение под отладчиком и установить точку останова, в которой вызывается srand () , а затем просто посмотрите на переданный параметр.

Затем нужно разобрать приложение и выяснить обстоятельства вызова srand. Вполне возможно, что он засевается с текущим временем - тогда вы можете попробовать несколько догадок (вы, вероятно, можете сузить его до нескольких тысяч или около того) и посмотреть, дает ли какая-либо та же последовательность случайных чисел, которую использует приложение. . (Конечно, это предполагает, что у вас есть способ узнать, какие генерируются случайные значения). Также возможно, что семя все время тупое, вроде «0».

было бы запустить приложение под отладчиком и установить точку останова, в которой вызывается srand () , а затем просто посмотрите на переданный параметр.

Затем нужно разобрать приложение и выяснить обстоятельства вызова srand. Вполне возможно, что он засевается с текущим временем - тогда вы можете попробовать несколько догадок (вы, вероятно, можете сузить его до нескольких тысяч или около того) и посмотреть, дает ли какая-либо та же последовательность случайных чисел, которую использует приложение. . (Конечно, это предполагает, что у вас есть способ узнать, какие генерируются случайные значения). Также возможно, что семя все время тупое, вроде «0».

Затем нужно разобрать приложение и выяснить обстоятельства вызова srand. Вполне возможно, что он засевается с текущим временем - тогда вы можете попробовать несколько догадок (вы, вероятно, можете сузить его до нескольких тысяч или около того) и посмотреть, дает ли какая-либо та же последовательность случайных чисел, которую использует приложение. . (Конечно, это предполагает, что у вас есть способ узнать, какие генерируются случайные значения). Также возможно, что семя все время тупое, вроде «0».

Затем нужно разобрать приложение и выяснить обстоятельства вызова srand. Вполне возможно, что он засевается с текущим временем - тогда вы можете попробовать несколько догадок (вы, вероятно, можете сузить его до нескольких тысяч или около того) и посмотреть, дает ли какая-либо та же последовательность случайных чисел, которую использует приложение. . (Конечно, это предполагает, что у вас есть способ узнать, какие генерируются случайные значения). Также возможно, что семя все время тупое, вроде «0».

(Конечно, это предполагает, что у вас есть способ узнать, какие генерируются случайные значения). Также возможно, что семя все время тупое, вроде «0».

(Конечно, это предполагает, что у вас есть способ узнать, какие генерируются случайные значения). Также возможно, что семя все время тупое, вроде «0».

0
ответ дан 13 December 2019 в 22:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: