secretos | Módulo de Python para generar números aleatorios seguros

El módulo de secretos se usa para generar números aleatorios para administrar datos importantes, como contraseñas, autenticación de cuentas, tokens de seguridad y secretos relacionados, que son criptográficamente fuertes. Este módulo es responsable de brindar acceso a la fuente más segura de aleatoriedad. Este módulo está presente en Python 3.6 y superior.

Números aleatorios: secretos de clase.SystemRandom

Esta clase utiliza la función os.urandom() para la generación de números aleatorios a partir de fuentes proporcionadas por el sistema operativo.

  1. secrets.choice(secuencia): esta función devuelve un elemento elegido al azar de una secuencia no vacía para administrar un nivel básico de seguridad.
    Ejemplo 1: Genere una contraseña alfanumérica de diez caracteres.

    import secrets
    import string
      
    alphabet = string.ascii_letters + string.digits
    password = ''.join(secrets.choice(alphabet) for i in range(10))
      
    print(password)

    Producción :

    'tmX47l1uo4'
    

    Ejemplo 2: genere una contraseña alfanumérica de diez caracteres con al menos un carácter en minúscula, al menos un carácter en mayúscula y al menos tres dígitos.

    import secrets
    import string
      
    alphabet = string.ascii_letters + string.digits
    while True:
        password = ''.join(secrets.choice(alphabet) for i in range(10))
        if (any(c.islower() for c in password) and any(c.isupper() 
        for c in password) and sum(c.isdigit() for c in password) >= 3):
            print(password)
            break

    Producción :

    Tx8LppU05Q
    
  2. secrets.randbelow(n) : esta función devuelve un número entero aleatorio en el rango [0, n).

    import secrets
      
    passwd = secrets.randbelow(20)
    print(passwd)

    Producción :

    2
    
  3. secrets.randbits(k): esta función devuelve un int con k bits aleatorios.

    import secrets
      
    passwd = secrets.randbits(7)
    print(passwd)

    Producción :

    61
    

Generando fichas

Este módulo proporciona varias funciones para generar tokens seguros para aplicaciones como restablecimiento de contraseña, URL difíciles de adivinar, etc.

  1. secrets.token_bytes([nbytes=None]) : esta función es responsable de generar una string de bytes aleatoria que contiene nbytes de bytes. Si no se proporciona ningún valor, se utiliza un valor predeterminado razonable.

    import secrets
      
    token1 = secrets.token_bytes()
    token2 = secrets.token_bytes(10)
      
    print(token1)
    print(token2)

    Producción :

    b"\x86?\x85\xcf\x8ek8ud\x8a\x92\x8b>R\xc7\x89_\xc4x\xce'u]\x95\x0c\x05*?HG8\xfb"
    b'Dx\xe8\x7f\xc05\xdf\xe0\xf6\xe1'
    
  2. secrets.token_hex([nbytes=None]) : Esta función se encarga de generar una string de texto aleatorio en hexadecimal que contiene nbytes bytes aleatorios. Si no se proporciona ningún valor, se utiliza un valor predeterminado razonable.

    import secrets
      
    token1 = secrets.token_hex(16)
    token2 = secrets.token_hex(9)
      
    print(token1)
    print(token2)

    Producción :

    5d894a501c88fbe735c6ff496a6d3e51
    78baed9057e597dce4
    
  3. secrets.token_urlsafe([nbytes=None]) : esta función es responsable de generar una string de texto aleatoria segura para URL que contiene nbytes de bytes aleatorios. Esto es adecuado para aplicaciones de recuperación de contraseña.
    Ejemplo: Genere una URL temporal difícil de adivinar que contenga un token de seguridad.

    import secrets
      
    url = 'https://mydomain.com/reset=' + secrets.token_urlsafe()
    print(url)

    Producción :

    https://mydomain.com/reset=GbOiFIvhMoqWsfaTQKbj8ydbo8G1lsMx1ECa6SXjb1s
    
  4. ¿Cuántos bytes deben usar los tokens?
    Se deben usar al menos 32 bytes para tokens para estar seguros contra un ataque de fuerza bruta.

Referencia: Documentación oficial de Python
Este artículo es una contribución de Aditi Gupta . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *