Я пишу программный продукт, который запускается внутри баннерной рекламы и генерирует миллионы идентификаторов сеансов каждый день. В течение долгого времени я знал, что генератор случайных чисел во Flash не является достаточно случайным, чтобы генерировать достаточно уникальные идентификаторы, поэтому я использовал несколько приемов, чтобы получить еще больше случайных чисел. Однако в ActionScript 2.0 это нелегко, и я вижу все больше и больше коллизий, поэтому мне интересно, есть ли что-то, что я упустил.
Насколько я могу судить, проблема с Math.random()
заключается в том, что он засеян системным временем, а при наличии достаточного количества одновременных попыток возникает довольно много коллизий.
В ActionScript 3.0 я использую значение, возвращаемое System.totalMemory
, в качестве дополнительной случайности, но в ActionScript 2.0 нет эквивалента. AS3 также имеет Font.enumerateFonts
и некоторые другие вещи, которые отличаются от системы к системе.
Что мне нужно, это не что-то совершенно случайное, просто что-то достаточно случайное, чтобы разбавить случайность, которую я получаю от Math.random()
. Подумайте об этом так: есть определенный шанс, что два человека сгенерируют одну и ту же последовательность случайных чисел, используя только Math.random()
, но вероятность того, что два человека сгенерируют одну и ту же последовательность и , скажем, точно тот же список шрифтов значительно ниже.
Я не могу полагаться на наличие достаточного доступа к сценарию, чтобы использовать ExternalInterface
для получения доступа к таким вещам, как пользовательский агент или URL-адрес страницы. Мне не нужны предложения о том, как сделать это в AS3, любой другой системе или на стороне сервера, только AS2 - используя только то, что доступно в стандартных API.
На стороне сервера я также добавляю IP-адрес к идентификатору сеанса, но даже этого недостаточно (например, многие крупные компании используют один прокси-сервер, а это означает, что тысячи людей имеют один и тот же IP - - и поскольку они, как правило, смотрят на одни и те же сайты с одной и той же рекламой, примерно в одно и то же время, возникает много коллизий идентификаторов сеансов). Делать больше на стороне сервера по разным причинам нецелесообразно. Я, например, не могу генерировать случайные числа на стороне сервера и отправлять их клиенту, даже если я очень хотел бы иметь возможность решить их таким образом.
Лучшее, что я до сих пор придумал, - это использовать список микрофонов (Microphone.names
), но я также попытался сделать дактилоскопию, используя некоторые свойства из System.capabilities
, я не уверен, сколько случайности я могу получить от этого, хотя я не использую это в данный момент. Надеюсь, я что-то упустил.
Извините за наглость в комментариях к вашим ответам, но, пожалуйста, если вы не знаете ActionScript 2.0 или не знаете, как работает генератор псевдослучайных чисел, не пытайтесь отвечать , это не поможет, и я буду давать отрицательные отзывы. Я действительно ценю правильные ответы.