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).
apg
personalmente.)apg
para 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/urandom
junto contr
para 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
tr
quejarse de la entrada, intente agregarLC_ALL=C
así: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ígitoshead
comando 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 altr
comando 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
-s
argumento (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
openssl
comando, la navaja suiza de la criptografía.o
fuente
rand -hex
limitará 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 12
produce 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/urandom
por 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-c
bandera. 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; echo
si 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; echo
excluir | \ / `y espacioDependiendo del nivel de aleatoriedad que desee, simplemente puede ir con la variable integrada de bash (también
zsh
yksh
, posiblemente, otros)$RANDOM
:Los métodos para leer directamente
/dev/urandom
son 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
$RANDOM
imprimirá 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
shuf
es 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/urandom
usohead -c 100
. Otra forma de hacer esto es condd
:El
2>/dev/null
final deldd
comando 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
tr
queja 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/random
coniconv -c -t US
. Sin embargo, Gilles sugirió un diagnóstico y una solución diferentes, que funcionan para mí:fuente
iconv
solución maxes un núcleo CPU y no produce una salida (Esperé unos 10 segundos antes de matar a ella) ...libc-bin
2.19. No estoy seguro de si es el mismo iconv ...tr
admite entrada binaria. Sin embargo, un rango comoA-Z
puede estar influenciado por la configuración regional. PruebaLC_ALL=C tr …
tr
hace 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=C
lo arreglará.tr
procesar 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)APG
se 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 -m14
Puede usar una de las
md5
herramientas 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
password
es una palabra elegida que se utilizará para la construcción de la cadena aleatoria ysalt
es 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
salt
así:entonces puede crear una secuencia que puede recuperar si usa la palabra junto con la misma sal (o salto) si se definió originalmente.
fuente
salt
se está utilizando, esto suena similar al enfoque PasswordMaker ...Use el
xxd
comando 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 44
Esto 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
1
sin 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/urandom
es una secuencia de "bytes" aleatorios (que incluyen caracteres no imprimibles)base64
codifica datos de bytes en[A-Za-z0-9/+]
(que es totalmente imprimible)dd
copia 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.base64
ajusta a 76 columnas de forma predeterminada y debe reiniciarse a-w0
menos 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
tr
Personalmente, nunca prefiero caracteres especiales en la contraseña, es por eso que solo elijo
[:alnum:]
mi generador de contraseñafuente
Mantengo
secpwgen
en 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 +%N
dado 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