Перейти к содержимому
PulsarKit

Сгенерировать случайные числа и строки

Генерируйте случайные числа в диапазоне без повторов или случайные строки из букв, цифр и символов. Используется crypto.getRandomValues.

Как сгенерировать случайные числа и строки

  1. 1

    Выберите числа или строку

    Переключитесь на диапазон чисел — целых или дробных — или на случайную строку, собранную из выбранных типов символов.

  2. 2

    Задайте диапазон или алфавит

    Для чисел укажите минимум, максимум и нужны ли повторы. Для строк включите или выключите типы символов или вставьте свой алфавит.

  3. 3

    Сгенерируйте и скопируйте результат

    За один раз выводится до 10 000 значений, по одному в строке. Их удобно сразу скопировать в буфер обмена.

Почему crypto.getRandomValues, а не Math.random

Math.random в JavaScript работает быстро, но не рассчитан на защиту от предсказаний. Для некоторых реализаций достаточно нескольких десятков значений, чтобы восстановить внутреннее состояние генератора и предсказать все следующие. crypto.getRandomValues берет числа из криптографически стойкого генератора операционной системы — того же источника, который браузер использует для создания ключей шифрования. Наблюдение за последовательностью не дает никакой информации о следующих значениях. Этот инструмент всегда берет числа отсюда, в том числе для перетасовки списка, когда повторы отключены.

Модульное смещение и как его убирает метод отбраковки

Наивный способ превратить случайное 32-битное число в «значение от 1 до 100» — взять его по модулю 100. Но так нижняя часть диапазона становится чуть более вероятной: 2^32 не делится на 100 без остатка, и все лишние значения, которые не помещаются в полное кратное, «округляются вниз» к одной и той же небольшой группе результатов. Здесь вместо этого каждый такой неравномерный результат выбрасывается, а число тянется заново — это называется методом отбраковки (rejection sampling). В итоге у каждого числа в заданном диапазоне ровно одинаковая вероятность выпасть.

Все значения генерируются в этой вкладке

Числа и строки создаются целиком в вашем браузере через Web Crypto API. Ничего сгенерированного не отправляется на сервер и не сохраняется в хранилище браузера. Поделившись ссылкой, вы передаете только настройки — диапазон, алфавит, количество и т. п. Сами значения она никогда не кодирует, потому что воспроизводимая по ссылке «случайная» выборка теряет смысл.

Частые вопросы

Почему crypto.getRandomValues лучше, чем Math.random?

Math.random оптимизирован под скорость, а не под непредсказуемость. Для ряда JavaScript-движков показано, что по небольшой выборке результатов можно восстановить внутреннее состояние генератора. crypto.getRandomValues использует криптографически стойкий генератор случайных чисел операционной системы, для которого таких упрощений не существует.

Как работает режим «без повторов» для больших диапазонов?

Для диапазонов до пяти миллионов возможных значений инструмент строит полный список, перемешивает его алгоритмом Фишера–Йетса и берет из него нужное количество чисел. Для еще больших диапазонов значения тянутся по одному, и сохраняются только новые. Это остается быстрым, пока вы запрашиваете гораздо меньше значений, чем содержит диапазон, и совпадения попадаются редко.

Что такое модульное смещение и почему тут не используют просто %?

Если взять случайное 32-битное число и сузить его обычной операцией остатка от деления, нижняя часть диапазона станет самую малость вероятнее. Причина в том, что 2^32 почти никогда не делится нацело на размер диапазона. Этот инструмент отбраковывает и перетягивает небольшой кусок значений, который дал бы такой перекос, поэтому каждое возможное значение в диапазоне остается равновероятным.

Можно ли использовать результат как пароль?

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

Сколько чисел или строк можно сгенерировать за раз?

До 10 000 за один запуск — и для чисел, и для строк. Этого с запасом хватает для розыгрышей, тестовых данных и выборки в экспериментах, и запускать инструмент много раз не придется.

Покидают ли сгенерированные значения мой браузер?

Нет. Каждое число и каждый символ генерируются локально через Web Crypto API и не загружаются никуда. Единственный способ, которым значение может покинуть страницу, — когда вы копируете его в буфер обмена, и это делаете только вы.

Почему в ссылку нельзя включить сами числа?

Ссылка хранит только настройки — диапазон, количество, разрешены ли повторы и другие параметры, но не сами значения. Если бы по ссылке можно было воспроизвести те же «случайные» числа, они становились бы предсказуемыми, а это противоречит цели их генерации.

Похожие инструменты