01.04 - Números pseudoaleatorios en Python
Modelos de Simualción
Generar números pseudoaleatorios
Para generar números pseudoaleatorios en Python, se utiliza la función random()
de la librería random
. Esta función devuelve un número pseudoaleatorio entre 0 y 1.
import random
print(random.random())
Generar números pseudoaleatorios enteros
Para generar números pseudoaleatorios enteros en Python, se utiliza la función randint()
de la librería random
. Esta función devuelve un número pseudoaleatorio entre los dos números que se le pasan como parámetros.
import random
print(random.randint(1, 10))
Generar números pseudoaleatorios con una distribución normal
Para generar números pseudoaleatorios con una distribución normal en Python, se utiliza la función normalvariate()
de la librería random
. Esta función devuelve un número pseudoaleatorio con una distribución normal con media y desviación típica que se le pasan como parámetros.
import random
print(random.normalvariate(0, 1))
Numeros aleatorios criptográficamente seguros
El módulo secrets en Python se utiliza para generar números aleatorios criptográficamente seguros, lo que es útil en situaciones donde la seguridad es importante, como la generación de contraseñas, tokens o claves de cifrado. A diferencia del módulo random, secrets utiliza fuentes de entropía del sistema para generar números verdaderamente aleatorios.
En general, el módulo secrets utiliza la función os.urandom() de Python, que a su vez hace uso de las siguientes fuentes de entropía en función del sistema operativo:
Linux, macOS y otros sistemas UNIX-like: La función os.urandom() se basa en el dispositivo /dev/urandom, que es un generador de números aleatorios criptográficamente seguro proporcionado por el núcleo del sistema operativo. Este dispositivo utiliza varias fuentes de entropía, como el ruido de dispositivos de hardware (teclado, ratón, etc.), eventos del sistema y la hora del sistema, para generar números aleatorios.
Windows: En sistemas Windows, la función os.urandom() utiliza la función CryptGenRandom (para versiones anteriores de Windows) o BCryptGenRandom (para Windows 8 y versiones posteriores) proporcionada por el sistema operativo. Estas funciones utilizan fuentes de entropía similares a las de los sistemas UNIX-like, como eventos de hardware, eventos del sistema y la hora del sistema, para generar números aleatorios.
Es importante tener en cuenta que aunque estas fuentes de entropía son generalmente consideradas seguras para la mayoría de los propósitos, no son inmunes a ataques. En casos extremadamente raros y con recursos suficientes, un atacante podría intentar influir en estas fuentes de entropía o predecir su comportamiento. Sin embargo, en la práctica, esto es altamente improbable y, para la mayoría de los casos de uso, el módulo secrets proporciona números aleatorios suficientemente seguros.
SystemRandom
Para generar números aleatorios criptográficamente seguros en Python, se utiliza la función SystemRandom()
de la librería random
. Esta función devuelve un número aleatorio criptográficamente seguro.
import random
print(random.SystemRandom().random())
Secrets
Generar números aleatorios criptográficamente seguros
Para generar números aleatorios criptográficamente seguros en Python, se utiliza la función randbits()
de la librería secrets
. Esta función devuelve un número aleatorio criptográficamente seguro.
Generar un número entero seguro aleatorio en un rango:
import secrets
a, b = 1, 10
numero_aleatorio = secrets.randbelow(b - a + 1) + a
print("Número entero aleatorio seguro:", numero_aleatorio)
Generar un número entero seguro aleatorio en un rango:
import secrets
a, b = 1, 10
numero_aleatorio = secrets.randbelow(b - a + 1) + a
print("Número entero aleatorio seguro:", numero_aleatorio)Generar una cadena segura de bytes aleatorios:
import secrets
num_bytes = 16
bytes_aleatorios = secrets.token_bytes(num_bytes)
print("Bytes aleatorios seguros:", bytes_aleatorios)
Generar un token hexadecimal seguro:
import secrets
longitud = 32
token_hexadecimal = secrets.token_hex(longitud)
print("Token hexadecimal seguro:", token_hexadecimal)Generar un token URL seguro (base64 sin relleno):
import secrets
longitud = 32
token_url = secrets.token_urlsafe(longitud)
print("Token URL seguro:", token_url)