Como os computadores geram números aleatórios

3

Esta pode muito bem ser a única pergunta que eu já fiz nesse site do stackexchange. Na programação, existem muitas maneiras diferentes de gerar números aleatórios, dependendo de diferentes idiomas. O que tem me incomodado há algum tempo, no entanto, é como qualquer coisa gerada por computador pode ser aleatória? Eu encontrei this post no entanto não foi muito bem recebido e disse a ampla ou a muitas respostas possíveis. No entanto, a maneira que eu vejo, há apenas uma resposta possível, como funciona! Eu quero dizer que alguém com um background de computador deveria ser capaz de responder isso, então não é como se eu estivesse pedindo sua opinião. Como nota final, gostaria de me desculpar se estiver no fórum errado.

    
por SemperAmbroscus 19.03.2015 / 23:56

3 respostas

3

Eles podem e não podem depender do computador. Normalmente, é um algoritmo pseudo-aleatório. Um dos primeiros algoritmos foi basicamente apenas executar uma série de aritmética básica (multiplicar, dividir, adicionar, subtrair, módulo) em um número chamado de semente, e pegar os números do meio, ou algo assim. Os números parecem aleatórios, mas depois de um certo número de tentativas, o mesmo ciclo se repetirá.

O que significa que eles não podem usar um PRNG para criptografar sua senha. Os PRNGs costumam usar a hora do sistema como semente, portanto, se o atacante souber o tempo aproximado em que sua senha foi criptografada (tempo de criação da conta, tempo de alteração da senha), ele poderá gerar uma pequena variedade de senhas usando esse intervalo de tempo gerou senhas em vez de gerar todas as combinações possíveis permitidas.

Se você já visitou www.random.org, provavelmente verá que eles geram números verdadeiramente aleatórios. Isso porque eles usam dispositivos para coletar ruído atmosférico, ou algum tipo de ruído atmosférico, e usam isso.

Não sou especialista nisso, mas acho que alguns sistemas operacionais também podem coletar dados das movimentações do mouse e do teclado do usuário junto com um PRNG para gerar números seguros o suficiente para criptografar senhas com

    
por 20.03.2015 / 00:11
3

Eles não fazem

Eles usam algoritmos conhecidos como Pseudo-Random Number Generators (PRNGs). Eles sempre produzem a mesma sequência de números, a menos que você forneça um número "semente" exclusivo para iniciá-los.

Um número de semente pode ser criado a partir de uma combinação de fontes relativamente aleatórias - por exemplo, os últimos dígitos dos milissegundos da hora atual, os últimos movimentos do ponteiro do mouse.

O resultado é uma sequência de números que, para muitos propósitos, é suficientemente semelhante a uma sequência aleatória para ser imprevisível.

    
por 20.03.2015 / 00:04
-2

Aqui está um trecho de código de uma das minhas atribuições. Ele gera números aleatórios, em seguida, verifica se o número aleatório já foi colocado na matriz e, se não tiver, então é permitido entrar e, caso contrário, não é usado.

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;
    }
    
por 20.03.2015 / 01:13