S02 - Projeto: Força da Senha
Finalidade
Provar que você pode escrever funções com parâmetros e chamar essas funções várias vezes com argumentos.
Projeto
Não use IA para gerar o código deste programa.
Usar IA para gerar este programa é uma violação da política de IA do curso e pode resultar em nota 0 na atividade, reprovação na disciplina ou até remoção do programa.
Se você precisar de ajuda com a atividade ou tiver dúvidas sobre o uso de IA, por favor, pergunte ao seu instrutor.
Contexto
Você é um desenvolvedor júnior em uma operadora de telefonia. A empresa emprega desde o suporte ao cliente até engenheiros de torres. A equipe de segurança descobriu uma violação atribuída ao uso de senhas fracas. Para treinar os usuários, a gerência solicitou a criação de um verificador de força de senha, que dará feedback sobre a segurança das senhas.
Requisitos para o verificador de força de senha
Maria García, da equipe de segurança, definiu os seguintes requisitos para o verificador:
- O usuário pode testar várias senhas até decidir sair. A ideia é que, com o uso da ferramenta, os empregados aprendam a criar senhas mais seguras.
- A senha será verificada contra:
- Um lista de palavras do dicionário (sem diferenciar maiúsculas/minúsculas).
- Uma lista de senhas mais usadas (com diferenciação de maiúsculas/minúsculas).
- Os dois arquivos serão encontrados na sessão Etapa
- O usuário irá inserir uma senha e o programa calculará e exibirá a força da senha (de 0 a 5) com uma mensagem explicativa.
- A lógica de cálculo deve estar numa função reutilizável.
Regras para cálculo de força
Para cada caso abaixo, o programa deve exibir a mensagem correspondente e retornar o valor da força da senha.
- Senha está no dicionário (sem diferenciar maiúsculas/minúsculas)
Exibir a mensagem: "A senha está no dicionário e não é segura."
Retornar força: 0 - Senha está na lista de senhas mais comuns (diferencia maiúsculas/minúsculas)
Exibir a mensagem: "A senha é comumente usada e não é segura."
Retornar força: 0 - Senha com menos de 10 caracteres
Exibir a mensagem: "A senha é muito curta e não é segura."
Retornar força: 1 - Senha com mais de 15 caracteres
Exibir a mensagem: "A senha é longa, o comprimento supera a complexidade e é uma boa senha."
Retornar força: 5 - Demais casos
A força da senha, nos demais casos, será determinada pela complexidade, ou seja, pela quantidade de tipos diferentes de caracteres presentes. Quanto maior a variedade, mais segura será a senha.
Neste programa, há quatro tipos de caracteres considerados:- Letras minúsculas
- Letras maiúsculas
- Dígitos
- Símbolos especiais
A complexidade será um número de 1 a 4, indicando quantos tipos desses grupos aparecem na senha. Por exemplo:
- Apenas letras maiúsculas → complexidade 1
- Letras maiúsculas e minúsculas → complexidade 2
A complexidade das senhas é analisada (letras maiúsculas, minúsculas, dígitos, símbolos) e a pontuação é calculada corretamente (1 + pontuação de complexidade).
O valor obtido deve ser retornado como a força da senha.
Design
Os requisitos foram enviados a João Leal, arquiteto de software, para apoiar o design do programa. Ele e sua equipe definiram a arquitetura que você deve seguir. Como programador júnior, utilize exatamente as funções e parâmetros definidos por João.
Especificações das Funções
Nome da Função Tipo de Retorno Descrição procurar_palavra Parâmetrospalavra,nome_do_arquivo,maiusculas_e_minusculasTipo de RetornoBooleano (True ou False) Esta função lê um arquivo (informado pelo parâmetro nome_do_arquivo), em que cada linha contém uma única palavra.
Se a palavra passada no parâmetro palavra corresponder a uma palavra no arquivo, a função retornaráTrue; caso contrário, retornaráFalse.
Se o parâmetro maiusculas_e_minusculas forTrue, a comparação será feita com distinção entre maiúsculas e minúsculas.
Se forFalse, a comparação será feita sem distinção entre maiúsculas e minúsculas (comportamento padrão).
Por padrão, o parâmetro maiusculas_e_minusculas deve serFalsepalavra_tem_caractere Parâmetros palavra,lista_caracteres Tipo de Retorno Booleano (True ou False) Esta função percorre cada caractere da string passada no parâmetro palavra para verificar se ele está presente na lista de caracteres informada no parâmetro lista_caracteres.
Se algum caractere da palavra estiver na lista de caracteres, a função retornaráTrue.Se nenhum caractere da palavra estiver na lista, a função retornará
False.calcular_complexidade Parâmetros palavra Tipo de Retorno Inteiro Esta função cria um valor numérico que representa a complexidade da senha com base nos tipos de caracteres que o parâmetro palavra contém. Um ponto de complexidade é atribuído para cada tipo de caractere presente na palavra.
A função chama palavra_tem_caractere para verificar cada um dos quatro tipos de caracteres:
- Minúscula
- Maiúscula
- Dígitos
- Especial
Se a palavra contiver esse tipo de caractere, um ponto será adicionado à classificação de complexidade. Como existem quatro tipos de caracteres, a classificação de complexidade variará de 0 a 4.
O valor 0 será retornado apenas se a palavra estiver vazia ou contiver apenas caracteres que não pertençam a nenhuma das listas acima.
validar_senha Parâmetros senha, comprimento_min, comprimento_forte Tipo de Retorno Inteiro A função validar_senha verifica os requisitos de comprimento, chama calcular_complexidade para calcular a complexidade da senha e então determina a força final com base nos requisitos do usuário.
Ela deve exibir as mensagens definidas nos requisitos e retornar a força da senha como um número de 0 a 5.
O parâmetro comprimento_min deve ter um valor padrão de 10. O parâmetro comprimento_forte deve ter um valor padrão de 16.main Fornece o loop de entrada do usuário. O loop solicita ao usuário uma senha para teste. Se a senha for qualquer coisa diferente de "q" ou "Q", chame a função validar_senha e informe os resultados ao usuário. Se o usuário digitar "q" ou "Q", saia do programa. Outras informações úteis.
João sabe que você é um programador júnior e ofereceu algumas dicas para ajudá-lo.
- Inclua o seguinte código Python no final do seu programa. Esse código ajudará a equipe de testes a garantir que seu programa seja executado corretamente. João agendou um treinamento para sua equipe, para apresentá-los aos testes de software em um futuro próximo.
if __name__ == "__main__": main() - Ao abrir o arquivo de senha e o dicionário, certifique-se de incluir o parâmetro de codificação e passar a ele o valor utf-8. Isso assegura que python vai conseguir ler todos os caracteres corretamente.
open(nome_do_arquivo, "r", encoding="utf-8") - Ao ler uma linha do arquivo, use a função strip() da string para remover o caractere de nova linha do final da string. Se você não fizer isso, suas comparações de palavras não retornarão o resultado esperado.
- Você pode usar as seguintes definições para as listas de tipos de caracteres
MINUSCULAS=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"] MAIUSCULAS=["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"] DIGITOS=["0","1","2","3","4","5","6","7","8","9"] ESPECIAIS=["!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "-", "_", "=", "+", "[", "]", "{", "}", "|", ";", ":", """, """, ",", ".", "<", ">", "?", "/", "`", "~"]
Etapa
Comece seu projeto escrevendo o esboço do seu programa. Siga estas etapas:
- Crie uma pasta para o projeto desta semana e dê a ela o nome que você quiser.
- Abra a pasta que você acabou de criar no VSCode.
- Crie um arquivo chamado senhas.py.
- Adicione as constantes que definem as listas de caracteres fornecidas por João no topo do seu código.
- Crie uma definição de função para cada uma das funções definidas por João. Como você ainda não terá nenhum código em suas funções, basta adicionar a palavra
passcomo corpo da sua função.PassSe eu fosse criar uma função chamada área que eu quisesse alterar o código mais tarde, mas quisesse incluir a definição da função agora, ela poderia ficar assim:
def area(raio): passLembre-se de remover a palavra pass ao adicionar código à função.
- Baixe os seguintes arquivos e salve-os no diretório do seu projeto:
- Lista de senhas mais usadas: senhas_mais_comuns.txt.
- Palavras do dicionário: dicionario.txt
- Adicione um código à sua função main, conforme descrito na lista de requisitos. Como a função validar_senha não será concluída, apenas exiba uma mensagem que exibe a senha digitada pelo usuário.
NOTA: O arquivosenhas_mais_comuns.txté uma lista real das senhas mais comuns obtida em pesquisas de segurança; o arquivodicionario.txté uma lista de palavras que encontramos no dicionário da língua portuguesa. Esteja ciente de que nenhuma das listas foi filtrada para remover palavras potencialmente ofensivas.Envio de Etapa
Na data de entrega ou antes dela, retorne ao Canvas e reporte seu progresso nesta etapa.
Conclusão do Projeto
Conclua seu projeto completando o código de cada função. Certifique-se de que seu código atenda aos requisitos especificados acima.
Desafios Adicionais
Se o seu programa atender aos requisitos para esta atividade, conforme descrito acima, você receberá 93% dos pontos possíveis. Para ganhar os 7% de pontos restantes, você precisará adicionar um ou mais recursos ao seu programa. Use sua criatividade. Adicione um comentário no topo do seu código que explique a(s) melhoria(s).
Documente suas melhorias:Se você escolher adicionar recursos ao seu código, coloque um comentário no topo do seu arquivo descrevendo o que você fez para melhorar seu programa.
Teste
Você pode testar seu programa usando as seguintes informações.
Senha Força Mensagem adicional abandono 0 A senha é uma palavra do dicionário e não é segura. cancoesnatalinas 0 A senha é uma senha comumente usada e não é segura. comfeesperanacaecaridade 5 A senha é longa, o comprimento supera a complexidade e é uma boa senha. ijepqnjp 1 A senha é muito curta e não é segura. ijepqnjpqz 2 ijepqnjpqz! 3 iJepqnjpqz! 4 iJepqnjpqz!9 5 Envio do Projeto
Para enviar seu programa, retorne ao Canvas e faça estas duas coisas:
-
Volte ao Canvas e envie seu arquivo
senhas.pypara que seu programa seja avaliado.
Não tire zero!Se o seu programa contiver um erro que o impeça de ser executado até o fim, a tarefa receberá nota zero e você precisará corrigir e reenviar o código. Em outras palavras, evite enviar um programa que não funciona. Em vez disso, peça ajuda para entender o erro e corrigi-lo antes do envio.
Links Úteis:
- Voltar para: Visão Geral da Semana | Página Inicial