Depende de lo que entiendas por "legible". Si desea utilizar únicamente caracteres hexadecimales, necesitará 32 de ellos para alcanzar los 128 bits de entropía; esta línea funcionará (usando solo comandos del coreutils
paquete):
head -c16 /dev/urandom | md5sum
Esta variante produce contraseñas con solo letras minúsculas, desde la 'a' hasta la 'p' (esto es lo que querrá si tiene que "escribir" la contraseña en un teléfono inteligente):
head -c16 /dev/urandom | md5sum | tr 0-9 g-p
Si desea escribir un carácter menos, intente esto:
head -16 /dev/urandom | md5sum
(La probabilidad de obtener los primeros 16 bytes aleatorios como 0x0A, es decir, el carácter de "nueva línea", es 2, por lo que esta línea aún obtiene 128 bits de entropía).
Todavía te limitas a los comandos de coreutils
, puedes hacer esto:
mktemp -u XXXXXXXXXXXXXXXXXXXXXX
Este genera una contraseña de 22 caracteres, usando /dev/urandom
como fuente interna de aleatoriedad (revisé el código fuente y un strace
llamada confirma). Los caracteres son letras (mayúsculas y minúsculas) y dígitos; como 62 es mayor que 2, los 22 caracteres son suficientes.
Otro más:
od -An -x /dev/urandom | head -1
esto muestra ocho secuencias de cuatro dígitos hexadecimales. Podría decirse que esta división en pequeñas secuencias puede ayudar a leer.
Para una línea mucho más larga y un tipo de contraseña bastante distinto, intente esto:
for i in {1..8} ; do head -$(expr $(head -c7 /dev/urandom | od -An -t dL) % $(wc -l < /usr/share/dict/british-english)) /usr/share/dict/british-english | tail -1 ; done
(este solo funciona en un host de 64 bits; ¿notará por qué?). Aparte de coreutils
, esa versión también requiere un archivo de diccionario, aquí el de inglés británico.
Algunas sugerencias fabulosas en las otras respuestas. Encuentro que makepasswd no está disponible en todas partes, y usar tr es (un poco) complicado, por lo que hay otra opción usando OpenSSL:
openssl rand -base64 16
El número es el número de bytes de aleatoriedad, por lo que 16 bytes para 128 bits de entropía.
Usando pwgen
El oneliner más simple de la historia:
pwgen
Intenta crear contraseñas que sean fáciles de recordar. Para deshabilitar eso y crear contraseñas más seguras, use el --secure
o -s
bandera.
pwgen -s
¿Las contraseñas generadas son demasiado largas? ¿Demasiado corto? Simplemente agregue la longitud deseada:
pwgen 9
# Or
pwgen -s 9
# Or
pwgen 9 -s
Herramientas similares
Resulta que conozco pwgen, hay otras herramientas por ahí. Puede encontrarlos usando la función de búsqueda de su distribución. En Debian esto es:
apt-cache search password generator
Hace una búsqueda exacta (aunque no distingue entre mayúsculas y minúsculas). Usando password generat
en cambio, amplía la búsqueda.
Antes de instalar el paquete, puede ser útil ver su descripción. De nuevo en Debian:
apt-cache show $DESIRED_PACKAGE
# E.g.
apt-cache show pwgen
Herramientas que pude encontrar de esta manera:
pwgen
makepasswd
apg
otp
(destinado a almohadillas de un solo uso, no recomendado)gpw
(se centra en gran medida en la pronunciabilidad, no recomendado)
Uso de herramientas estándar de Unix
No todos los sistemas pueden tener pwgen disponible. Como otros han respondido, puede usar md5sum
o sha256sum
, pero eso solo genera 0-9 y a-f. Sin g-z o mayúsculas y minúsculas, y mucho menos caracteres especiales. Es mejor simplemente filtrar los caracteres no imprimibles de /dev/urandom
hasta que tenga una contraseña de la longitud deseada:
cat /dev/urandom | tr -cd '@-~' | head -c 8
Lo que da algo como XiVsdn[y
o [email protected]^lY
. Puedes cambiar el 8
al final para la longitud deseada de la contraseña. También puede cambiar el @-~
parte para limitar los caracteres. Por ejemplo, esto solo imprimirá caracteres alfanuméricos:
cat /dev/urandom | tr -cd 'a-zA-Z0-9' | head -c 8
Esto es casi idéntico a lo que pwgen -s
haría y da contraseñas como nZiUzNtE
.
Como beneficio adicional, el tr
La herramienta está incluida en casi todos los sistemas operativos (Mac OS X, GNU/Linux, Android/Linux, Solaris, FreeBSD, etc.) excepto Microsoft Windows.