Кроме того, не действительно уверенный, если я прямо здесь. Но ADO.NET всегда работает 'офлайн' с Вашими данными. Я думаю, что LINQ2SQL работает онлайн с Вашими данными.
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;
}
Теоретически нет - начальное значение используется для вычисления следующего случайного значения, и это значение (теоретически) используется для начального значения следующего случайного числа и так далее.
С точки зрения безопасности возможность заглянуть в семя (будь то исходное или новое) - серьезная проблема безопасности, поэтому я полагаю, что вы не сможете изучить его, даже если оно должно где-то храниться.
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.
Я не знаю, каков ваш уровень владения сборкой и есть ли у вас доступ к исходному коду / символам отладки для неуправляемого приложения, но кроме такого рода уловок, нет реального способа определить исходное начальное значение. Вся суть генераторов случайных чисел состоит в том, чтобы придумать способ давать вам непредсказуемые числа - отношения между любыми двумя заданными вызовами rand () не должны выводиться. В криптографически стойких генераторах псевдослучайных чисел возможность угадать начальное число на основе сгенерированного случайного числа будет считаться серьезной ошибкой.
Самый простой способ сделать это - запустить приложение под отладчиком и установить точку останова, где srand ( )
вызывается - тогда просто посмотрите на переданный параметр.
Затем нужно разобрать приложение и выяснить обстоятельства вызова srand. Вполне возможно, что он засевается с текущим временем - тогда вы можете попробовать несколько предположений (вы, вероятно, можете сузить его до нескольких тысяч или около того) и посмотреть, дает ли какая-либо та же последовательность случайных чисел, которую использует приложение. . (Конечно, это предполагает, что у вас есть способ узнать, какие генерируются случайные значения). Также возможно, что семя все время тупое, вроде «0».
было бы запустить приложение под отладчиком и установить точку останова, в которой вызывается srand ()
, а затем просто посмотрите на переданный параметр.
Затем нужно разобрать приложение и выяснить обстоятельства вызова srand. Вполне возможно, что он засевается с текущим временем - тогда вы можете попробовать несколько догадок (вы, вероятно, можете сузить его до нескольких тысяч или около того) и посмотреть, дает ли какая-либо та же последовательность случайных чисел, которую использует приложение. . (Конечно, это предполагает, что у вас есть способ узнать, какие генерируются случайные значения). Также возможно, что семя все время тупое, вроде «0».
было бы запустить приложение под отладчиком и установить точку останова, в которой вызывается srand ()
, а затем просто посмотрите на переданный параметр.
Затем нужно разобрать приложение и выяснить обстоятельства вызова srand. Вполне возможно, что он засевается с текущим временем - тогда вы можете попробовать несколько догадок (вы, вероятно, можете сузить его до нескольких тысяч или около того) и посмотреть, дает ли какая-либо та же последовательность случайных чисел, которую использует приложение. . (Конечно, это предполагает, что у вас есть способ узнать, какие генерируются случайные значения). Также возможно, что семя все время тупое, вроде «0».
Затем нужно разобрать приложение и выяснить обстоятельства вызова srand. Вполне возможно, что он засевается с текущим временем - тогда вы можете попробовать несколько догадок (вы, вероятно, можете сузить его до нескольких тысяч или около того) и посмотреть, дает ли какая-либо та же последовательность случайных чисел, которую использует приложение. . (Конечно, это предполагает, что у вас есть способ узнать, какие генерируются случайные значения). Также возможно, что семя все время тупое, вроде «0».
Затем нужно разобрать приложение и выяснить обстоятельства вызова srand. Вполне возможно, что он засевается с текущим временем - тогда вы можете попробовать несколько догадок (вы, вероятно, можете сузить его до нескольких тысяч или около того) и посмотреть, дает ли какая-либо та же последовательность случайных чисел, которую использует приложение. . (Конечно, это предполагает, что у вас есть способ узнать, какие генерируются случайные значения). Также возможно, что семя все время тупое, вроде «0».
(Конечно, это предполагает, что у вас есть способ узнать, какие генерируются случайные значения). Также возможно, что семя все время тупое, вроде «0». (Конечно, это предполагает, что у вас есть способ узнать, какие генерируются случайные значения). Также возможно, что семя все время тупое, вроде «0».