DEV Community

Discussion on: Como roubar no random?

Collapse
 
lelepg profile image
Letícia Pegoraro Garcez • Edited

Será que utilizando a função random.seed() não seria possível obter resultados diferentes? O que eu utilizei uma vez para gerar números randômicos foi utilizar random.seed(random.random()), e depois chamar a função random.random()*100 pra preencher a variável que deveria guardar meu valor aleatório. Refiz este teste, e rodei o script várias vezes seguidas para ver se tinha alguma repetição de valores, mas me parece que o resultado foi bem aleatório.

Collapse
 
eduardoklosowski profile image
Eduardo Klosowski

Sim, alterando o seed é possível obter resultados diferentes, na verdade é o seed que define os resultados obtidos pelo random. O exemplo seguinte sempre retorna os mesmos resultados, independente de quantas fezes for executado:

import random
random.seed(10)
random.random()  # 0.5714025946899135
random.random()  # 0.4288890546751146
random.random()  # 0.5780913011344704
random.random()  # 0.20609823213950174
random.random()  # 0.81332125135732
Enter fullscreen mode Exit fullscreen mode

Na verdade o random não é aleatório, e sim randômico, uma função com resultados que parecem ser aleatórios, mas sabendo a semente (seed) é possível obter a mesma sequência de valores. Então o que normalmente é feito é usar a hora do computador, assim cada execução teria uma seed diferente, tendo resultados diferentes, mas se a hora do dispositivo for conhecida, isso pode levar a fanhas de segurança. Por isso alguns programas pedem para ficar movendo o mouse enquanto eles geram as chaves de criptografia, usando esses movimentos para gerar os valores que são muito mais difíceis de prever do que uma sequência randômica.

Mas alterando o seed, embora altere o resultado do random, não seria possível manipular o resultado de acordo com o usuário passado para a função.