Generar contraseñas aleatorias en python
Generar password aleatorio en python |
La idea de esta entrada es mostrar un par de script que generan contraseñas (password) aleatorias y luego comprobaremos su seguridad.
En el primer script utilizaremos 2 librerías que vienen integradas en Python: random y string. El módulo String se utiliza para trabajar con cadenas y el módulo random se utiliza para generar valores aleatorios.
En el segundo scritp utilizaremos el módulo strgen el cual tendremos que instalar porque no viene integrado con python. Este módulo utiliza la sintaxis parecida a las expresiones regulares.
Enlace para descargar e instrucciones para instalar el módulo strgen: https://pypi.python.org/pypi/StringGenerator
Puedes ver también: Como instalar pip en Linux y Windows
Para comprobar la seguridad de los password generados utilizaremos la página: https://howsecureismypassword.net/
Primer script
import random import string password = ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(15)) print password
Esto nos devuelve:
Contraseña generada |
Probamos su seguridad:
Seguridad del Password |
Al parecer nuestro password es bastante seguro.
Podemos cambiar la cantidad de caracteres que tiene nuestro password (cambiemos a 6):
for x in range(6))
Ejecutamos:
Contraseña generada |
Probamos su seguridad:
Seguridad del password |
Y al agregarle menos caracteres al password lógicamente pierde seguridad.
Segundo Script
Para instalar el módulo recomiendo utilizar la herramienta pip, se utiliza para descargar e instalar módulos de python de manera fácil. La mejor guía que encontré para instalr pip la encontré en este enlace: http://recursospython.com/guias-y-manuales/instalacion-y-utilizacion-de-pip-en-windows-linux-y-os-x/
Luego que de tener instalado el módulo strgen, el script es el siguiente:
from strgen import StringGenerator as SG print SG("[wpd]{20}").render()
Ejecutamos:
Password con strgen |
Probamos su seguridad:
Seguridad del password |
Al parecer es bastante segura jeje. Pueden probar cambiar las variables y revisar la documentación oficial para generar contraseñas que se adecuen a sus necesidades, por hoy esto fue todo. Espero les pueda ser de ayuda en algún momento. No olviden dejar sus comentarios 😉
Saludos, Diego...
Fuente: http://code.activestate.com/recipes/578920-random-password-generation/
-
-
Gracias por el excelente comentario. Voy a cambiar la entrada y probar lo que recomiendas. Saludos
-
Deja una respuesta
Aunque imagino que no es el alcance inicial que busca el articulo, yo uso en la practica diaria algo parecido, por lo que sugiero cambiar la línea general de generación de la cadena aleatorias por la siguiente:
"".join([random.SystemRandom().choice(string.digits + string.ascii_letters + string.punctuation) for i in range(16)])
Y las razones serian las siguientes:
1. Cambio random por SystemRandom siguiendo muchas recomendaciones del sector #infosec acerca de debilidades en la aleatoriedad real, y como es mucho mas robusta dentro de la segunda función.
2. Cambio string.uppercase por string.ascii_letters que contiene todos los caracteres en mayúsculas y minúsculas.
3. Incluyo string.punctuation que contiene todos los caracteres considerados como puntuación; aunque con este punto hay que considerar el entorno de aplicación de la contraseña, porque algunos caracteres no son aceptados por no estar adecuadamente escapados o cosas por el estilo.
Una prueba con 6 caracteres, aunque sigue siendo baja, eleva el resultado a un minuto, y todo obtenido con la librería estándar y sin necesidad de instalar librerías adicionales, obteniendo el mismo resultado con menor complejidad (no hay que usar RegEx que puede ser tan agobiante)