Вполне возможно, это единственный вопрос, который я когда-либо задавал на этом сайте stackexchange. В программировании есть много разных способов генерировать случайные числа в зависимости от разных языков. Что меня беспокоило какое-то время сейчас, однако, КАК что-либо генерируемое компьютером может быть случайным? Я нашел этот пост, однако он был не очень хорошо принят, и он сказал, чтобы широкие или многие возможные ответы. Однако, как я вижу, есть только один возможный ответ, как это работает! Я хочу сказать, что кто-то с компьютерным опытом должен ответить на этот вопрос, поэтому я не спрашиваю вашего мнения. В качестве последнего замечания я хотел бы извиниться, если я не на том форуме.
3 ответа
Они не
Они используют алгоритмы, известные как генераторы псевдослучайных чисел (PRNG). Они всегда производят одну и ту же последовательность чисел, если только вы не предоставите уникальный начальный номер для начала.
Начальный номер может быть создан из комбинации относительно случайных источников - например, последние несколько цифр миллисекунд текущего времени, последние несколько движений указателя мыши.
Результатом является последовательность чисел, которая для многих целей достаточно похожа на случайную последовательность, чтобы быть непредсказуемой.
Они могут и не могут в зависимости от компьютера. Обычно это псевдослучайный алгоритм. Один из самых ранних алгоритмов был в основном просто для выполнения серии базовой арифметики (умножение, деление, сложение, вычитание, по модулю) для числа, называемого начальным числом, и взятия средних чисел или чего-то в этом роде. Числа кажутся случайными, но после определенного количества испытаний, тот же цикл повторяется.
Это означает, что они не могут использовать PRNG для шифрования вашего пароля. PRNG обычно используют системное время в качестве начального числа, поэтому, если злоумышленник знает приблизительное время, когда ваш пароль был зашифрован (время создания учетной записи, время смены пароля), он может просто сгенерировать небольшой диапазон паролей, используя этот временной диапазон, и попробовать все сгенерированные пароли вместо того, чтобы генерировать все возможные комбинации.
Если вы когда-нибудь заходили на www.random.org, вы, вероятно, увидите, что они генерируют действительно случайные числа. Это потому, что они используют устройства для сбора атмосферного шума или каких-либо шумных атмосферных данных и используют его.
Я не эксперт в этом, но я думаю, что некоторые операционные системы могут также собирать данные от движений мыши и клавиш пользователя вместе с PRNG, чтобы генерировать числа, достаточно безопасные для шифрования паролей с помощью
Вот фрагмент кода из одного из моих заданий. Он генерирует случайные числа, а затем проверяет, было ли случайное число уже помещено в массив, а если нет, то разрешено входить и, если нет, оно не используется.
public static int[] RandomArray(int RandArrayNValue)
{
int[] array = new int[RandArrayNValue];
Random rand = new Random();
for (int i = 0; i < RandArrayNValue; i++)
{
array[i] = i + 1;
}
Console.WriteLine();
for (int i = array.Length - 1; i >= 0; i--)
{
int Store = rand.Next(i);
int TempStore = array[Store];
array[Store] = array[i];
array[i] = TempStore;
Console.WriteLine(" " + array[i]);
}
return array;
}