Genere contraseñas XKCD desde una sola línea Bash

Genere contraseñas XKCD desde una sola línea Bash

Existen algunos generadores de "contraseñas XKCD", pero la tarea parece muy sencilla, por lo que quería una solución compacta y simple. Mis requisitos fueron:

  • Alias ​​de una línea (o función de pocas líneas) para ingresar.profile
  • Comandos estándar de Unix (no requieren paquetes)
  • Salida de columna (como pwgen)
  • Palabras en mayúsculas (para facilitar la lectura)

(Estoy feliz de renunciar a las opciones de la línea de comandos a cambio de simplicidad).

for i in {1..32}; do grep -E "^[a-z]{4,8}$" /usr/share/dict/words | gshuf -n4 | gsed 's/.*/\u&/' | tr -d '\n' | awk '{print $1}'; done | column

Problemas actuales:

  • shufrequiere brew install coreutilsen macOS (que también uso)
  • sedrequiere brew install gnu-sed(ídem)
  • tr -d '\n' | awk '{print $1}'Parece una tontería.

¿Cómo puedo crear una línea de comando breve pero legible que funcione tanto en Linux como en macOS?

Como nota al margen, descubrí que al usar SCOWL, que tiene una variedad desde listas cortas de palabras con nombres comunes hasta listas largas de palabras con palabras oscuras, puedes combinar memorabilidad vs. entropía.

Respuesta1

No tengo acceso a mi Mac desde donde estoy, pero como ejecuta OS X 10.4.11, no estoy seguro de que sea comparable a su entorno. Lo siguiente funciona para generar una única contraseña en FreeBSD. Si esto no satisface sus necesidades, no dude en dejarme saber lo que le falta en los comentarios:

(sort -R /usr/share/dict/words                                   \
 | head -n 4                                                     \
 | awk '{ sub(".", substr(toupper($0),1,1)); printf "%s", $0 }'  \
 ; echo)

En FreeBSD y en mi sistema Arch Linux, sort -Rordena la entrada de forma aleatoria. Es sólo pseudoaleatorio, pero eso es lo mejor que obtendrás con la mayoría de los otros programas. Luego elige cuatro palabras de ese conjunto con head. En lugar de GNU sed, awkse puede utilizar para poner en mayúscula el primer carácter de cada línea. Finalmente, echose utiliza para colocar la nueva línea final. Todo esto está en una subcapa para facilitar su inclusión en un bucle, tubería u otra construcción.

información relacionada