Me gustaría generar una cadena aleatoria (por ejemplo, contraseñas, nombres de usuario, etc.). Debería ser posible especificar la longitud necesaria (por ejemplo, 13 caracteres).
¿Qué herramientas puedo usar?
(Por razones de seguridad y privacidad, es preferible que las cadenas se generen fuera de línea, en lugar de en línea en un sitio web).

apgpersonalmente.)apgpara generar una cadena aleatoria./dev/urandom. Ej .). Sería bueno tener algunas respuestas utilizando verdaderos generadores de números aleatorios, basados en, por ejemplo, random.org .Respuestas:
Mi forma favorita de hacerlo es usarlo
/dev/urandomjunto contrpara eliminar caracteres no deseados. Por ejemplo, para obtener solo dígitos y letras:Alternativamente, para incluir más caracteres de la lista de caracteres especiales de contraseña de OWASP :
Si tiene algunos problemas para
trquejarse de la entrada, intente agregarLC_ALL=Casí:fuente
head /dev/urandom | tr -dc A-Za-z0-9 | head -c10- Esta manera es más precisa. Obtienes 10 caracteres que son mayúsculas, minúsculas o dígitosheadcomando puede ser problemático. Producirá las primeras 10 líneas/dev/urandom, lo que significa que se detendrá una vez que haya visto la décima línea nueva. Entonces, la longitud de la salida enviada altrcomando es aleatoria. Es posible que haya menos de 13 caracteres en la salida detr. No he calculado la probabilidad de que esto suceda, los cálculos son un poco complicados.<dev/urandom tr -dc "$charset" | head -c "$length"tr -dc A-Za-z0-9\!\"#$\&\'\(\)\*+,-./\:\\\\\;\<=\>\?@[]^_`{\|}~tr ..comando, pero solo citar todo (excepto la comilla simple) funcionatr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~'.Para generar una contraseña aleatoria puede usar
pwgen:Genere 7 contraseñas de longitud 13:
Como se menciona en los comentarios, puede evitar reducir la entropía utilizando el
-sargumento (es decir, generar contraseñas más seguras, completamente aleatorias pero difíciles de recordar):Para generar nombres de usuario aleatorios, puede usar
gpw:Genere 7 contraseñas (nombres de usuario) de longitud 13:
fuente
pwgen -s.Estoy usando el
opensslcomando, la navaja suiza de la criptografía.o
fuente
rand -hexlimitará la salida a solo 16 caracteres, en lugar de los 90+ en mi teclado. base64 es mejor porque tiene 64 caracteres, pero no es aleatorio (por ejemplo, hay patrones de relleno predecibles y quizás algunos caracteres aparecen con más frecuencia que otros).openssl rand -base64 12produce 16 caracteres de salida (porque 256 valores se asignan a 64). Y el ejemplo hexadecimal produce 24 caracteres. No hay pérdida en el caso del hexadecimal ya que es un mapeo simple 1: 2, pero puede haber un poco en el caso de base64 ya que se usa relleno. La raíz no afecta la aleatoriedad, es la forma en que uno se asigna a otro que sí. (y el recuento total de bits es mucho más importante).Así es como lo hago. Genera una cadena aleatoria de 10 caracteres. Puede optimizarlo reemplazando el "pliegue", con otras herramientas de procesamiento de cadenas.
fuente
/dev/urandompor supuestoPara generar una contraseña con la mayor entropía posible con las herramientas estándar de Linux integradas en cada distribución que uso:
Esto genera todos los caracteres imprimibles ASCII, desde 32 (espacio) hasta 126 (tilde,
~). La longitud de la contraseña se puede controlar con lahead's-cbandera. También hay otros conjuntos de caracteres posiblestr(para no incluir el espacio, solo los caracteres 33-126, use[:graph:]).fuente
< /dev/urandom tr -cd '[:graph:]'| tr -d '\\' | head -c 32; echosi no quiere` characters in generated string.`porque un carácter de escape en muchos idiomas causa problemas< /dev/urandom tr -cd "[:print:]" | tr -d ' \\/\`\|' | head -c 32; echoexcluir | \ / `y espacioDependiendo del nivel de aleatoriedad que desee, simplemente puede ir con la variable integrada de bash (también
zshyksh, posiblemente, otros)$RANDOM:Los métodos para leer directamente
/dev/urandomson mucho más simples, pero para completar, también puedes usar$RANDOM:Importante : esta solución solo producirá cadenas aleatorias utilizando las primeras 10 letras del alfabeto. Si eso es suficiente para usted o no, depende de para qué lo necesite.
fuente
$RANDOMimprimirá un número entre 0 y 32767.rand=$(head -c 100 /dev/urandom | tr -dc A-Za-z0-9 | head -c13)lugar.Inspirado por Pablo Repetto, terminé con esta solución fácil de recordar :
-z evita la salida multilínea
-e echo el resultado
-r permite que cualquier personaje aparezca varias veces
-n20 cadenas aleatorias con una longitud de 20 caracteres
{A..Z} {a..z} {0..9} clases de caracteres permitidas
shufes parte de los Linux Coreutils y está ampliamente disponible o al menos ha sido portado.fuente
@Brandin explicó en un comentario a otra respuesta cómo obtener como máximo 100 bytes del
/dev/urandomusohead -c 100. Otra forma de hacer esto es condd:El
2>/dev/nullfinal delddcomando es suprimir la salida "... registros de entrada / ... registros de salida".No conozco ninguna ventaja / desventaja sustancial entre estos dos métodos.
Tuve un problema con ambos métodos de
trqueja sobre la entrada. Pensé que esto se debía a que no le gustaba recibir entradas binarias y, por lo tanto, sugerí primero filtrar/dev/randomconiconv -c -t US. Sin embargo, Gilles sugirió un diagnóstico y una solución diferentes, que funcionan para mí:fuente
iconvsolución maxes un núcleo CPU y no produce una salida (Esperé unos 10 segundos antes de matar a ella) ...libc-bin2.19. No estoy seguro de si es el mismo iconv ...tradmite entrada binaria. Sin embargo, un rango comoA-Zpuede estar influenciado por la configuración regional. PruebaLC_ALL=C tr …trhace porque no admite multibyte en absoluto (por ejemplo, la última vez que lo verifiqué, el cambio de mayúsculas y minúsculas se implementó simplemente configurando el sexto bit de cada byte). Otros sistemas (por ejemplo, BSD) admiten multibyte y esto fallará allí, ya que la posibilidad de que un flujo de entrada aleatorio sea también un flujo multibyte válido es muy pequeña en la mayoría de las codificaciones. GNU puede agregar soporte multibyte en cualquier momento dado, momento en el cual esto fallará. Por supuesto, la configuraciónLC_ALL=Clo arreglará.trprocesar la entrada binaria (en la configuración regional C). (Bueno, está bien, solo dice explícitamente que los bytes nulos deben ser compatibles, no dice que los archivos no vacíos que no terminan con un carácter de nueva línea deben ser compatibles, pero en la práctica ese también es siempre el caso)APGse incluye por defecto en algunas distribuciones de Linux.Para generar contraseñas de tamaño 5 a 10 en subconjuntos Especial, Numérico, Capital e Inferior, el comando es:
Y vuelve
Como dijo @landroni en el comentario.
fuente
apg -a1 -m14Puede usar una de las
md5herramientas que tiene precisamente este propósito. En el caso de crear una contraseña completamente aleatoria, puede usar elmd5pass. Es una herramienta muy simple de usar y muy útil, ya que puede usar "texto normal" junto con una "sal" para saltar la construcción de la misma contraseña que puede recuperar después, o alternativamente puede querer obtener una contraseña aleatoria todo el tiempo El uso general es:donde
passwordes una palabra elegida que se utilizará para la construcción de la cadena aleatoria ysaltes el salto en bytes que se utilizará. Me gusta esto:Esto creará una contraseña de "secuencia aleatoria" para que la use. Si usa no
salt, es posible que no pueda volver a crear esta misma cadena después.Sin embargo, si usas algo
saltasí:entonces puede crear una secuencia que puede recuperar si usa la palabra junto con la misma sal (o salto) si se definió originalmente.
fuente
saltse está utilizando, esto suena similar al enfoque PasswordMaker ...Use el
xxdcomando para especificar la longitud (a través de -l) que funciona en Linux y OS. https://www.howtoforge.com/linux-xxd-command/fuente
Estos dos comandos generan contraseñas y frases de contraseña aleatorias, respectivamente.
El generador de contraseñas requiere un archivo con caracteres que contenga todos los caracteres que desea que use la contraseña, un carácter por línea y exactamente una vez cada uno. El archivo no debe contener líneas en blanco, y las líneas deben estar terminadas en nueva línea.
El generador de frase de contraseña requiere un archivo_con_palabras que contenga todas las palabras que desea que use la frase de contraseña, una palabra por línea y exactamente una vez cada una. El archivo no debe contener líneas en blanco, y las líneas deben estar terminadas en nueva línea.
La opción --head-count especifica la longitud de la contraseña, en caracteres, o frase de contraseña, en palabras.
fuente
Descubrí que piping / dev / urandom to tr en macOS no funcionaba. Aquí hay otra forma:
fuente
Yo suelo:
base64 < /dev/urandom | tr -d 'O0Il1+\' | head -c 44Esto me da 57 personajes posibles. La cadena se puede copiar-pegar (eliminar
+y\) o imprimir y volver a escribir a medida que se eliminan los caracteres difíciles de distinguir (I1lO0).Me gusta esto porque:
Crédito a https://unix.stackexchange.com/a/230676/9583 y especialmente los comentarios para mi inspiración inicial.
fuente
1sin reducir la entropía (mientras se genera uno nuevo para obtener una w / un número que hace reducir la entropía). También puede agregar con seguridad un!sin reducir la entropía. Ninguno de los esquemas aumenta la entropía que valga la pena, pero podría hacer que la cadena generada cumpla con los requisitos de contraseña anteriores.La filosofía de Unix de "muchas herramientas pequeñas que hacen una cosa bien" le sirve muy bien en este caso.
/dev/urandomes una secuencia de "bytes" aleatorios (que incluyen caracteres no imprimibles)base64codifica datos de bytes en[A-Za-z0-9/+](que es totalmente imprimible)ddcopia la entrada a la salida aplicando modificadores dados como argumentos (que pueden incluir el tamaño y el recuento de bloques)OSX
Linux
Notas:
tr -d '[A-Z/+]'para deshacerse de letras mayúsculas y+y/bs(tamaño del bloque) a la longitud que necesite.base64ajusta a 76 columnas de forma predeterminada y debe reiniciarse a-w0menos que lo desee.fuente
Me gustaría contribuir con mi comando habitual para generar una contraseña
Para configurar la longitud de la contraseña, cambie el número en el comando de corte a la longitud que necesita, por ejemplo, 24 caracteres
¿No quieres confundir 0 u O, 1 o l? Filtrarlo con otro
trPersonalmente, nunca prefiero caracteres especiales en la contraseña, es por eso que solo elijo
[:alnum:]mi generador de contraseñafuente
Mantengo
secpwgenen Alpine Linux y mantener las fuentes en mi Github .Puede producir cadenas aleatorias o frases de dados:
Para generar una cadena aleatoria de 13 caracteres usaría:
Para que los usuarios recuerden una contraseña, use las frases del diceware:
Personalmente me gusta:
fuente
Mi camino para una contraseña muy segura (donde 16 es la longitud de la contraseña):
Resultado de ejemplo:
O, alternativamente, para generar múltiples contraseñas:
cat / dev / urandom | tr -cd [: graph:] | fold -w 16 | head -6
Resultado de ejemplo:
Poco menos seguro (juego de caracteres más pequeño):
Resultado de ejemplo:
fuente
Una manera súper fácil y simple (probablemente más simple de lo que está buscando) de lograr esto sería generar un número aleatorio en un rango dado, convertir ese número a su carácter ASCII equivalente y agregarlo al final de una cadena .
Aquí hay un ejemplo básico en Python:
EDITAR: comentarios agregados y código agregado para generar múltiples contraseñas y escribirlas en un archivo
fuente
Me gustaría este comando:
fuente
date +%Ndado que si genera muchos usuarios y contraseñas en un script, los segundos podrían ser los mismos para muchos o incluso para todos los comandos de fecha, produciendo contraseñas idénticas.dd if=/dev/random bs=512 count=1:?Voy a http://passwordsgenerator.net/ que permite generar cadenas de caracteres aleatorios de hasta 2048 caracteres, seleccionando mayúsculas, minúsculas, dígitos del 0 al 9, signos de puntuación o cualquier combinación.
fuente