Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
13 / 9 / 4
Регистрация: 24.12.2020
Сообщений: 153

Программно предугадать значения Random

20.05.2022, 23:05. Показов 3232. Ответов 59
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Спустя столько времени у меня появился вопрос.
Возможно ли как-то предугадать программно значения Random для, допустим, отрезка в 100 чисел?
Или может перехватить эти цифры в процессе работы встроенной функции ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.05.2022, 23:05
Ответы с готовыми решениями:

Можно ли предугадать Random
Всем привет. Появился у меня такой вопрос. Если взять интернет рулетку, где время между ставками известно и фиксировано, то в ней для...

Можно ли предугадать,что выведет метод Random.Next и можно посмотреть сам этот класс?(код)
Можно ли предугадать,что выведет метод Random.Next и можно посмотреть сам этот класс?(код)

Повтор значения Random
Объявляется Random в двух разных классах и затем в третьем классе выводятся значения первого и второго рандомов. Но при втором выводе этих...

59
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
21.05.2022, 23:48
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от wizard41 Посмотреть сообщение
Согласен, но я двигаюсь в сторону ГСЧ, не со стороны .NET
В общем виде ответ такой, если это ГПСЧ - то цикл повторяется, хотя он может быть и очень большой.
Если же это настоящий ГСЧ, то повторения цикла и вовсе нет.
Так же в конкретной реализации ГСЧ или ГПCЧ могут быть какие-то ляпы, баги кодирования или алгоритма, которые позволяют хакнуть эту конкретную реализацию. Но обсуждение этого без алгоритма и кода реализации - бессмысленно.

Хоть как вы к этому двигайтесь, с любой стороны.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
21.05.2022, 23:52
Цитата Сообщение от OwenGlendower Посмотреть сообщение
сколько приложений полагаются на конструктор по умолчанию.
Мне давно кажется что никто не полагается.
Цитата Сообщение от OwenGlendower Посмотреть сообщение
это не единственный способ атаки
Надо полагать. Ведь инструменты NET это всего лишь взаимодействия инструментов в одной среде, "ака" мелкомягких. Но есть разграничение в вопросах "железной" реализации, хотя, и этот сектор подмят под них, так или иначе.
Цитата Сообщение от OwenGlendower Посмотреть сообщение
скорее делал ставку на статический анализ
Да, и в этом вынужден согласится.
Цитата Сообщение от OwenGlendower Посмотреть сообщение
именно потому что имеем в виду разные сценарии
Видимо так. Тем не менее, это не отменяет ценности настоящего диалога. Есть над чем поразмышлять.
0
13 / 9 / 4
Регистрация: 24.12.2020
Сообщений: 153
21.05.2022, 23:53  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Но ТС не указал рамки своей задачи в плане где выполняется код Random
Я вообще думал о 1) другом процессе на локальной машине
2)наш процесс
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
21.05.2022, 23:54
Цитата Сообщение от wizard41 Посмотреть сообщение
Можно пойти и дальше - дизассемблируем метод Random буквально по частям, и посмотрим, как долго эти части будут выполняться за машинные такты конкретно взятого процесора.
Это ничего не даст.
В возвращаетесь в таком случае к поиску нужного зерна, что в принципе не имеет смысла, так как просто даже точное знание всей реализации ГПСЧ, таймингов, не позволяет воссоздать точные условия генерации ключа.
Для их получения как минимум нужен хак программы создавшей этой ключ, после чего скорее всего разбирательство в тонкостях работы ГПСЧ уже не понадобится.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
21.05.2022, 23:58
Элд Хасп, если я начну генерировать СЧ исходя из текущей влажности между пакетами окон, то вы никогда не взломаете эту переменную в формуле. По крайней мере до тех пор, пока не приедете с прибором в точку отбора этой величины )

Добавлено через 2 минуты
Элд Хасп, не не, дисасемб предполагался только в целях вычисления времени выполнения. Никаких взломов исходного кода не имелось в виду.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
22.05.2022, 00:06
Цитата Сообщение от wizard41 Посмотреть сообщение
Да, на первый взгляд кажется что это не совместимые вещи. Но это только на первый взгляд...
И на первый, и на сотый.
Random всегда генерирует только Double число в диапазоне от нуля включительно до единицы исключительно.
К инту это число приводится банальным умножением на длину диапазона, прибавлением начала диапазона и отбрасывание дробной части результата.
Именно по этому в целом диапазоне верхняя граница исключительная.

Никакой аналогии с маятником это не имеет.
Маятник - это периодическая система.
А ГСЧ (в идеале) - это аналог белого шума.
Как вы шум не ограничивайте по диапазону, по частоте - он всегда останется шумом.

Добавлено через 6 минут
Цитата Сообщение от wizard41 Посмотреть сообщение
не не, дисасемб предполагался только в целях вычисления времени выполнения
Без социального хака вы даже примерно не можете знать какое время прошло от включения компа (загрузки ОС) до создания экземпляра Random. Может был холдстарт компа и первой программой был запущен генератор ключа. А может комп уже пару лет не перезагружался. Откуда вы можете эту информацию знать?

Без программного хака вы не сможете узнать был ли этот ключ получен первой серией из экземпляра Random или перед этим было какое-то количество обращений. А без этой информации, даже точно вычисленное зерно вам ничем не поможет, так как вы не сможете его проверить.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
22.05.2022, 00:08
Цитата Сообщение от Элд Хасп Посмотреть сообщение
И на первый, и на сотый.
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Как вы шум не ограничивайте по диапазону, по частоте - он всегда останется шумом.
Вы выдвинули два хороших тезиса, оба из которых я в силах опровергнуть. Вы готовы?
Ну подумайте хорошо, почему я привел пример с маятником.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
22.05.2022, 00:10
Цитата Сообщение от wizard41 Посмотреть сообщение
Мне давно кажется что никто не полагается.
Для целей тестирования вполне подходит конструктор по умолчанию.

Добавлено через 1 минуту
Цитата Сообщение от wizard41 Посмотреть сообщение
Ну подумайте хорошо, почему я привел пример с маятником.
На мой взгляд пример крайне неудачный.
Никакой аналогии с ГСЧ я в нём не вижу.

Цитата Сообщение от wizard41 Посмотреть сообщение
, оба из которых я в силах опровергнуть. Вы готовы?
Вперёд.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
22.05.2022, 00:17
Leooos, у вас есть более простые вопросы в запасе? А то взбудоражили всех мэтров форума и он завибрировал

Добавлено через 7 минут
Элд Хасп, у Вас есть ровно 100 чисел. Вы должны выложить мне каждое второе, если оно вместе с коэфф К делится нацело на 2. И времени вам на это 100 мс. Коэфф К мы получили при инициализации класса. Дальше молчу, жду ваших идей.
0
13 / 9 / 4
Регистрация: 24.12.2020
Сообщений: 153
22.05.2022, 00:18  [ТС]
wizard41,
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
22.05.2022, 00:26
Продолжаем...
Раньше мы высчитывали эту всю хрень с костяными счетами, но у нас появились японские калькуляторы... Время счета изменилось в сторону уменьшения. Факт?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
22.05.2022, 00:29
Цитата Сообщение от wizard41 Посмотреть сообщение
у Вас есть ровно 100 чисел...
Какое отношение этот вопрос имеет к ГСЧ?

Добавлено через 1 минуту
Цитата Сообщение от wizard41 Посмотреть сообщение
Время счета изменилось в сторону уменьшения. Факт?
И что?
ГСЧ как это касается? Считайте вы его хоть на счётах.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
22.05.2022, 00:41
Теперь берем ситуацию хуже - Random. Наш процессор тактуется собственным генератором. Выполняя при этом некоторое кол-во операций. ... Дальше интересно?

Добавлено через 2 минуты
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Какое отношение этот вопрос имеет к ГСЧ?
Именно к ГСЧ никакого. А вообще, ко всему. А ГСЧ имеет отношение к этому всему. Причем, весьма непосредственное.

Добавлено через 8 минут
Я дал вам диапазон, но ограничил время. Кол-во тактов осталось прежним. Смысл улавливаете? Колебания и волны, черт их побери.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
22.05.2022, 00:43
Цитата Сообщение от wizard41 Посмотреть сообщение
Именно к ГСЧ никакого. А вообще, ко всему. А ГСЧ имеет отношение к этому всему. Причем, весьма непосредственное.
Чаво?
Возможны вы в своей какой-то задаче используете ГСЧ.
Но собственно реализация ГСЧ никак не связана с вашей задачей.
ГСЧ понятия не имеет как вы собираетесь его использовать.

Речь идёт только о периодичности (длине цикла) чисел выдаваемых ГСЧ.
Это зависит только от реализации ГСЧ.
Для Random "ведущий" метод это NextDouble(). Если быть точным, то приватный метод InternalSample(), но NextDouble() его и возвращает если не было сделано никаких перегрузок в производных классах.
Все перегрузки целочисленного метода Next(...) работают через NextDouble().
И цикличность всех методов также определяется цикличностью метода NextDouble() - она у всех одинаковая.
Не зависит заданы параметры в Next или нет.

Добавлено через 1 минуту
Цитата Сообщение от wizard41 Посмотреть сообщение
Я дал вам диапазон, но ограничил время. Кол-во тактов осталось прежним. Смысл улавливаете? Колебания и волны, черт их побери.
Никакого смысла и связи с ГСЧ не улавливаю.
Вы даёте какую-то совершенно абстрактную, не относящуюся к обсуждаемому вопросу задачу.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
22.05.2022, 01:08
Элд Хасп, нет, я не решаю никакую задачу с ГСПЧ на данный момент. Я пытаюсь вам дать понять, как рандомизируются числа на уровне процессора. И кто и что за это отвечает.
На примере с маятником вам стало не понятно, ну что ж, подскажу:
Маятник совершает периодические колебания, точно так же, как и внутренний генератор Вашего процессора, который обрабатывает Ваши инструкции. Только колебания маятника должны поддерживаться механически. Ваш же процессор тактуется за счет подключения в розетку (в общем смысле).
Идем глубже - Random генератор, прежде чем он вернет некоторый результат, произойдет некоторое кол-во тактов ЦПУ.

Добавлено через 2 минуты
Давайте завтра все. Поздно, спать пора...

Добавлено через 2 минуты
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Никакого смысла и связи с ГСЧ не улавливаю.
Да, вероятно мы говорим об одном и том же, только смотря через свою призму с разных углов.

Добавлено через 7 минут
Касаемо задачи: повлияло бы сокращение времени на поиск на частоту ваших изысков искомого числа? Нет. Это к вопросу сужения диапазона колебаний маятника.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
22.05.2022, 01:14
Цитата Сообщение от wizard41 Посмотреть сообщение
Я пытаюсь вам дать понять, как рандомизируются числа на уровне процессора. И кто и что за это отвечает.
Вы только сами себя запутываете.
Откройте исходники и посмотрите как всё работает.

Цитата Сообщение от wizard41 Посмотреть сообщение
Идем глубже - Random генератор, прежде чем он вернет некоторый результат, произойдет некоторое кол-во тактов ЦПУ.
Во-воервых, Environment.TickCount имеет значение только для конструктора по умолчанию.
Оно никак (более точно - почти) не зависит от процессора и определяется таймером системы.
Небольшая погрешность от точных миллисекунд определяется "железом" и историей нагрузки компа.

Проблема здесь не в том как угадать эту погрешность, а в том, что вы в принципе не знаете загружался ли комп минуту назад или год назад.


Второе, без хака программы вы не можете знать используется ли конструктор по умолчанию или генерится более случайное зерно.

Третье, без хака программы вы не знаете сколько надо пропустить вызовов Next перед получением ключа.

Без этих трёх пунктов попытка подбора зерна для получения ключа обречена на провал.

Добавлено через 3 минуты
Цитата Сообщение от wizard41 Посмотреть сообщение
Идем глубже - Random генератор, прежде чем он вернет некоторый результат, произойдет некоторое кол-во тактов ЦПУ.
И какое это имеет отношение к генерации им чисел?
Никокого!
Возврат Random определяется только зерном и количеством вызовов InternalSample().
А будет между вызовами InternalSample() одна миллисекунда или год - никак на следующую выдачу не повлияет.
1
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
22.05.2022, 01:37
Элд Хасп, вы правы и нет одновременно. Я Вам про валенки, вы мне про пирожки.
Дайте мне расчет рэндом генератора, чтобы за единичный интервал он сгенерировал одинаковое значение на 1, 2-х, 5-ти и более ядрах.

Добавлено через 2 минуты
Цитата Сообщение от Элд Хасп Посмотреть сообщение
А будет между вызовами InternalSample() одна миллисекунда или год - никак на следующую выдачу не повлияет.
Дык кто ж с этим спорит? На основании текущих системных характеристик и кода .NET, я хочу узнать, какого влияние системы на генерацию следующего числа и возможность предсказания этого.

Добавлено через 1 минуту
Короче, сколько вешать в граммах?

Добавлено через 1 минуту
Цитата Сообщение от Элд Хасп Посмотреть сообщение
не знаете загружался ли комп минуту назад или год назад.
На этот случай там есть RTC, как бы. Даже в биосе зашит.

Добавлено через 12 минут
Leooos, не заходите сюда больше с такими запросами. А то взорвете тут все. И красный проводок перерезать не придется.
0
13 / 9 / 4
Регистрация: 24.12.2020
Сообщений: 153
22.05.2022, 01:43  [ТС]
wizard41, да ладно вам, интересно же )
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
22.05.2022, 02:00
Цитата Сообщение от wizard41 Посмотреть сообщение
Дайте мне расчет рэндом генератора, чтобы за единичный интервал он сгенерировал одинаковое значение на 1, 2-х, 5-ти и более ядрах.
Вообще не пойму о чём вы.
Как алгоритм Random связан с количество ядер?

Создаёте Random(константа) и он будет генерить у вас одинаковые последовательности хоть на одном, хоть на ста ядрах.

Цитата Сообщение от wizard41 Посмотреть сообщение
я хочу узнать, какого влияние системы на генерацию следующего числа и возможность предсказания этого
Система никак на влияет.
Она влияет только на создание экземпляра дефолтным конструктором Random().
На то какие числа потом будут гененериться система никак не влияет.

Цитата Сообщение от wizard41 Посмотреть сообщение
На этот случай там есть RTC, как бы. Даже в биосе зашит.
Причём здесь RTC?
Environment.TickCount инициализируется (обнуляется) при ЗАГРУЗКЕ ОС.
И таймер никак не поможет узнать его значение.

Добавлено через 10 минут
Цитата Сообщение от wizard41 Посмотреть сообщение
а этот случай там есть RTC, как бы. Даже в биосе зашит.
Возможно вы имели логи системы?
Да, по ним можно узнать приблизительное время работы компа - не подумал об этом.
Правда не могу сказать как оно будет связано с Environment.TickCount в режиах Гибернации и Сна.
Но это можно выяснить - не столь важно.
Даже если удастся посчитать приблизительное значение Environment.TickCount, то там диапазон может быть несколько тысяч значений.

И чтобы их проверить надо знать применялось ли зерно при инициализации и сколько нужно пропустить методов InternalSample() перед получением ключа.
Узнать эту информацию без хака программы не получится.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
22.05.2022, 10:57
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вообще не пойму о чём вы.
Да и я тоже сам себя не понял немного. Ладно, будет время, сформулирую подоходчивее... )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.05.2022, 10:57

Random выдает одинаковые значения
У меня такая проблема. Есть цикл, который заполняет массив объектов рандомными данными. Но при его работе он заполняет этот массив...

Random генерирует одни и те же значения
вот пример кода: double ran(double a) { Random rand = new Random(); a = rand.NextDouble(); ...

enum и Random(Вывод произвольного значения из перечисления)
Здравствуйте! Возник такой вопрос: есть перечисление, скажем enum Names ...

Вставить random значения в переменную типа string
Есть строковая переменная, нужно заменить значения, соответствующие условию на рандомные. Сделал так: ...

Random выдает одинаковые значения
Random rnd = new Random((int)DateTime.Now.Ticks); вот так инициализируется объект класса используется он следующим образом: for (int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru