Script gerador de senha

Publicado por Xerxes em 12/06/2024

[ Hits: 487 ]

 


Script gerador de senha



Basta executar o script a seguir e você poderá obter diversos tipos de senhas. A explicação do script vem logo a seguir.

Abra um novo arquivo de texto e cole o seguinte conteúdo:

#!/bin/bash

# Função para gerar uma senha
gerar_senha() {
local comprimento=$1
local usar_numeros=$2
local usar_caracteres_especiais=$3
local usar_letras_maiusculas=$4
local usar_letras_acentuadas=$5

# Base da senha apenas com letras minúsculas
local caracteres='abcdefghijklmnopqrstuvwxyz'

# Adicionar números
if [[ $usar_numeros == 's' ]]; then
caracteres+='0123456789'
fi

# Adicionar letras maiúsculas
if [[ $usar_letras_maiusculas == 's' ]]; then
caracteres+='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
fi

# Adicionar letras acentuadas
if [[ $usar_letras_acentuadas == 's' ]]; then
caracteres+='áéíóúâêîôûàèìòùãõäëïöüç'
fi

# Adicionar caracteres especiais
if [[ $usar_caracteres_especiais == 's' ]]; then
caracteres+='!@#$%^&*()_+=-[]{}|;:,.<>?'
fi

# Gerar senha
senha=''
for i in $(seq 1 $comprimento); do
senha+="${caracteres:RANDOM % ${#caracteres}:1}"
done

echo -e "\nSenha gerada usando as seguintes opções:"
echo " - Quantidade de caracteres: $comprimento"
echo " - Incluir números: ${usar_numeros^^}"
echo " - Incluir caracteres especiais: ${usar_caracteres_especiais^^}"
echo " - Incluir letras maiúsculas: ${usar_letras_maiusculas^^}"
echo " - Incluir letras acentuadas: ${usar_letras_acentuadas^^}"
echo -e "\nSenha gerada: $senha"
}

# Perguntar ao usuário as configurações da senha
read -p "Quantidade de caracteres na senha: " comprimento
read -p "Incluir números? (s/n): " usar_numeros
read -p "Incluir caracteres especiais? (s/n): " usar_caracteres_especiais
read -p "Incluir letras maiúsculas? (s/n): " usar_letras_maiusculas
read -p "Incluir letras acentuadas? (s/n): " usar_letras_acentuadas

# Chamar a função para gerar a senha
gerar_senha $comprimento $usar_numeros $usar_caracteres_especiais $usar_letras_maiusculas $usar_letras_acentuadas

Salve o arquivo com o nome que desejar como por exemplo "gerador_de_senhas.sh".

Trone-o executável:

chmod +x gerador_de_senhas.sh

Execute-o:

./gerador_de_senhas.sh

O script é simples e não é a prova de usuário. Por exemplo, quando for perguntado quantos caracteres a senha deve ter, se o usuário digitar algo sem sentido como "b", o script continua. Só não vai funcionar.

Segue a explicação do script:

  • #!/bin/bash: Esta linha indica que o script deve ser executado usando o interpretador Bash.
  • gerar_senha() { ... }: Esta sintaxe define uma função chamada gerar_senha. Funções em Bash ajudam a organizar o código de forma reutilizável.
  • local comprimento=$1: Esta linha define uma variável local chamada comprimento e a atribui ao primeiro argumento passado para a função ($1).
  • local usar_numeros=$2, local usar_caracteres_especiais=$3, local usar_letras_maiusculas=$4, local usar_letras_acentuadas=$5: Definem variáveis locais para os outros argumentos que serão passados para a função.
  • local caracteres='abcdefghijklmnopqrstuvwxyz': Cria uma variável chamada caracteres inicializada apenas com letras minúsculas.
  • if [[ $usar_numeros == 's' ]]; then ... fi: Verifica se o usuário escolheu incluir números. Se sim (== 's'), adiciona a sequência '0123456789' à variável caracteres.
  • if [[ $usar_letras_maiusculas == 's' ]]; then ... fi: Verifica se o usuário escolheu incluir letras maiúsculas. Se sim, adiciona letras maiúsculas à variável caracteres.
  • if [[ $usar_letras_acentuadas == 's' ]]; then ... fi: Verifica se o usuário escolheu incluir letras acentuadas. Se sim, adiciona as letras acentuadas à variável caracteres.
  • if [[ $usar_caracteres_especiais == 's' ]]; then ... fi: Verifica se o usuário escolheu incluir caracteres especiais. Se sim, adiciona os caracteres à variável caracteres.
  • senha='': Inicializa uma variável chamada senha como uma string vazia.
  • for i in $(seq 1 $comprimento); do ... done: Cria um loop que executa de 1 até o valor de comprimento. Por exemplo, se comprimento for 12, o loop será executado 12 vezes.
  • senha+="${caracteres:RANDOM % ${#caracteres}:1}": Em cada iteração do loop, um caractere aleatório da variável caracteres é adicionado à variável senha.
  • echo -e "\nSenha gerada usando as seguintes opções:": Exibe uma mensagem informativa no terminal indicando que mostramos as opções usadas para gerar a senha. O -e habilita a interpretação de caracteres de escape (como \n para nova linha).
  • echo -e "\nSenha gerada: $senha": Exibe a senha gerada.
  • read -p "Quantidade de caracteres na senha: " comprimento: Exibe a pergunta ao usuário e armazena a resposta na variável comprimento.
  • read -p "Incluir números? (s/n): " usar_numeros: Exibe a pergunta ao usuário e armazena a resposta na variável usar_numeros.
  • read -p "Incluir caracteres especiais? (s/n): " usar_caracteres_especiais: Exibe a pergunta ao usuário e armazena a resposta na variável usar_caracteres_especiais.
  • read -p "Incluir letras maiúsculas? (s/n): " usar_letras_maiusculas: Exibe a pergunta ao usuário e armazena a resposta na variável usar_letras_maiusculas.
  • read -p "Incluir letras acentuadas? (s/n): " usar_letras_acentuadas: Exibe a pergunta ao usuário e armazena a resposta na variável usar_letras_acentuadas.
  • gerar_senha $comprimento $usar_numeros $usar_caracteres_especiais $usar_letras_maiusculas $usar_letras_acentuadas: Chama a função gerar_senha, passando as respostas do usuário como argumentos.

Curiosidade:

E o que significa "^^" em alguns lugares do script? O operador "^^" é utilizado com a notação "${variável^^}" para converter uma string para maiúsculas. Aqui está um exemplo para ilustrar:

Se você tiver a variável "usar_numeros" com o valor "s":
- "${usar_numeros^^}" converterá "s" para "S".

Teste no terminal:

variavel="olá, mundo!"
$ echo "${variavel^^}"


É isso!
Outras dicas deste autor

PostgreSQL - "database server: mainError: could not exec" [Resolvido]

Removendo repositório conflitante do Fedora

Recuperando o LILO em 3 passos no Slackware

Pipelight plugin no Arch Linux

[RESOLVIDO] 'UnicodeError: ASCII encoding error: ordinal not in range(128) no ScriptLattes

Leitura recomendada

Proteja seu GNU/Linux de maneira correta!

Bloqueando o Ultrasurf através do Netfilter/Iptables versão 10.10

Vírus em plataformas *UNIX*

tcpdump - Capturando senhas de serviços POP3/IMAP/SMTP ou HTTP

Vulnerabilidade na variável PATH

  

Comentários
[1] Comentário enviado por maurixnovatrento em 23/06/2024 - 20:26h

Muito bom esse script.
______________________________________________________________________
Inscreva-se no meu Canal: https://www.youtube.com/@LinuxDicasPro
Repositório GitHub do Canal: https://github.com/LinuxDicasPro
Grupo do Telegram: https://t.me/LinuxDicasPro
Meu GitHub Pessoal: https://github.com/mxnt10



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts