Gerar senhas XKCD a partir da linha Bash simples [duplicada]

2

Existem alguns geradores de "XKCD password", mas a tarefa parece tão simples, então eu queria uma solução compacta e simples. Meus requisitos eram:

  • Alias de uma linha (ou função de poucas linhas) para colocar em .profile
  • Comandos Unix padrão (não requerem pacotes)
  • Saída da coluna (como pwgen )
  • Palavras da Titlecase (para legibilidade)

(Eu estou feliz em renunciar a opções de linha de comando em troca de simplicidade.)

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 atuais:

  • shuf requer brew install coreutils no macOS (que também uso)
  • sed requer brew install gnu-sed (idem)
  • tr -d '\n' | awk '{print $1}' parece bobo.

Como posso criar uma linha de comando curta e legível que funcione no Linux e no MacOS?

Em uma nota lateral, descobri que usando o SCOWL, que tem um intervalo de listas de palavras curtas com nomes comuns para listas de palavras longas com palavras obscuras, você pode compensar a memorização vs. entropia.

    
por forthrin 27.04.2017 / 14:25

1 resposta

1

Eu não tenho acesso ao meu Mac de onde estou, mas como ele está executando o OS X 10.4.11, não tenho certeza se seria comparável ao seu ambiente. O seguinte funciona para gerar uma única senha no FreeBSD. Se isso não atender às suas necessidades, sinta-se à vontade para me informar sobre o que falta nos comentários:

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

No FreeBSD e no meu sistema Arch Linux, sort -R ordena aleatoriamente a entrada. É apenas pseudo-aleatório, mas isso é tão bom quanto você vai ficar com a maioria dos outros programas também. Em seguida, escolha quatro palavras desse conjunto com head . Em vez de GNU sed , awk pode ser usado para capitalizar o primeiro caractere de cada linha. Finalmente, echo é usado para colocar a nova linha final. Isso é tudo em um subshell para facilitar a inclusão em um loop, pipe ou outro construto.

    
por 27.04.2017 / 19:27