PRG1-2018-1-Sistema-Validação-Senha

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

Título

Requisitos

  • diferenciar maiúscula de minuscula;
  • permitir símbolos (definir subconjunto)
  • permitir números
  • senha sempre começa com letra
  • mínimo de 6 caracteres e máximo de 25;
  • teste de combinações da palavra do dicionário.

Texto Descritivo do Projeto

O projeto do sistema validação de senha tem intuito de fazer uma verificação da senha de um usuário podendo ser uma senha boa ou senha ruim fazendo comparação com o arquivo de palavras existentes que o programa possui.o programa inicia pedindo dados do usuário como: nick_usuario,senha e para qual motivo esta tentando verificar a senha. Depois de pegar os dados do usuário que esta fazendo verificação do qualidade da senha, o programa irá realizar manipulações com a senha recebida do usuário, para poder obter uma senha que será comparada com as palavras existentes no arquivo do programa. Se a senha existir no arquivo de palavras do programa irá retornar que a senha é fraca, se a senha não existir no arquivo de palavras do programa então ela retornará que a senha é forte e será armazenada em um ranking de senhas onde irá mostrar qual a senha mais forte atual e para que motivo ela foi usada o programa.

Código Fonte Comentado

  1. include <stdio.h>
  2. include <stdlib.h>
  3. include <string.h>
  4. include <unistd.h>

char *subs_n_s(char *alfa) // Função que realiza substituições de caracteres e números existentes em alfa. { char string[50]; //Declaração de variáveis utilizadas na função subs_n_s. char senha0[50]; char senha_aux[50]; int i=0,k=0;

while (alfa[i] != 0){ //Loop que realiza verificação de caracteres ou números. Caso existam serão substituidos por "barspace". if (alfa[i] == '!' || alfa[i] == '@'|| alfa[i] == '#' || alfa[i] == '$' || alfa[i] == '%' || alfa[i] == '"' || alfa[i] == '*' || alfa[i] == '(' || alfa[i] == ')' || alfa[i] == '_' || alfa[i] == '-'||alfa[i] == '1' || alfa[i] == '2'|| alfa[i] == '3' || alfa[i] == '4' || alfa[i] == '5' || alfa[i] == '6' || alfa[i] == '7' || alfa[i] == '8' || alfa[i] == '9' || alfa[i] == '0'||alfa[i] == '&'||alfa[i] == '+'||alfa[i] == '='||alfa[i] == '.'||alfa[i] == ','||alfa[i] == ';'){ alfa[i] = ' '; } i++; }

strcpy(string,alfa); //copia o conteudo de alfa para variável string.

for(i=0; i<strlen(string); i++) //Loop que faz com que os "barspace" dentro da string sejam retirados. {

           if(string[i]=='\0')break;
   		if(string[i]==' ')continue;
   		senha_aux[k]=string[i];
  			 k++;
   }

strcpy(alfa,senha_aux); //Retorno do conteudo para alfa sem "barspace".

return alfa; }

char *reverse( char *s ) //Função realiza inversão de caracteres do sentido trás para frente. {

   int lg = strlen(s) ; //Declaração de variavéis da função reverse.
   int c,i,j;
   for (i = 0, j = lg - 1; i < j; i++, j--) //Loop realiza inversão nas posições da string de trás para frente.
   {
       c = s[i];
       s[i] = s[j];
       s[j] = c;
   }
   return s; 

}

void vef1(char *beta) //Função que realiza a primeira verificação se beta existe ou não no arquivo palavras e realizando uma contagem. {

   char ch[50]; //Declaração de variáveis na função vef1.

int u; int ct=0; char file_palavras[100]= "/home/jefferson/Downloads/palavras"; FILE *file; file = fopen(file_palavras, "r"); //Abre arquivo file em modo leitura.

if (file == NULL) //Condicional para verificar se houve erro na abertura do arquivo. { perror("Error while opening the file.\n"); exit(EXIT_FAILURE); } while((fscanf(file,"%s",ch) != EOF)) //Loop que realiza leitura do arquivo palavras. { u=strcmp(ch,beta); //Comparação de strings entre beta e arquivo. if (u==0) { ct = ct + 1; //Contador de quantas vezes beta é encontrado no arquivo palavras. } }

fclose(file); //Fechar arquivo file.

printf("número de vezes que a senha foi encontrada pela primeira verificação: %d\n",ct);

}

void vef2(char *gama) //Função que realiza a segunda verificação se gama existe ou não no arquivo palavras e realizando uma contagem. {

   char ch[50]; //Declaração de variáveis utilizadas na função.

int d; int ct=0; char file_palavras[100]= "/home/jefferson/Downloads/palavras"; FILE *file; file = fopen(file_palavras, "r");

if (file == NULL) //Condicional para verificar se houve erro na abertura do arquivo. { perror("Error while opening the file.\n");

exit(EXIT_FAILURE); } while((fscanf(file,"%s",ch) != EOF)) //Loop que realiza Leitura do arquivo palavras.

   { 

d=strcmp(ch,reverse(gama)); //Comparação entre o arquivo palavra e o reverso da string gama.

if (d==0) { ct = ct + 1; //Contador de quantas vezes gama é encontrado no arquivo palavras. } }

fclose(file);

printf("Número de vezes que a senha foi encontrada pela segunda verificação: %d\n",ct); }

extern void PermutaString(char *, int, int ); extern void ArmazenaPermutacoes(char*); FILE *out; //Variável out global.

void vef3(char *delta) //Função que realiza a terceira verificação se delta existe ou não no arquivo palavras e realizando uma contagem. {

   char senhap[50];

char ch[50]; int c; int ct=0; char file_palavras[100]= "/home/jefferson/Downloads/palavras"; FILE *file; file = fopen(file_palavras, "r");

if (file == NULL) //Condicional para verificar se houve erro na abertura do arquivo. { perror("Error while opening the file.\n"); exit(EXIT_FAILURE); }

out = fopen("permuta.txt", "w"); //Abre out em modo escrita.

   PermutaString(delta, 0, strlen(delta)-1); //Chamada função permuta para delta.
   fclose(out); //Fecha arquivo out.

out= fopen("permuta.txt", "r"); //Abre arquivo em modo leitura.

while((fscanf(out,"%s",senhap) != EOF)) { //Loop que realiza leitura do arquivo out. }

while((fscanf(file,"%s",ch) != EOF)) { //Loop que realiza leitura do arquivo file.

c=strcmp(ch,senhap); //comparação entre arquivos.

if (c==0){ ct = ct + 1; } } fclose(file); //Fecha arquivo file.

   fclose(out);	//Fecha arquivo out.	

printf("Número de vezes que a senha foi encontrada pela terceira verificação: %d\n",ct); }

void PermutaString( char *str, int k, int n ) //Função que realiza permutação de string. {

   int i;			//Declaração de variáveis da função PermutaString.
   char aux[10000],
        c; //Armazena um caracter.
   if ( k == n ) {  //Armazena permutação.
       ArmazenaPermutacoes(str);
       return;
   }
   strcpy(aux, str); 
   for ( i = k; i <=n; i++ ) 

{ //Loop que permuta o caracter k-ésimo de str com o caracter i-ésimo de str.

       c = str[k];
       str[k] = str[i];
       str[i] = c;
       PermutaString(str, k+1, n);
       strcpy(str,aux); 
   }

}

void ArmazenaPermutacoes(char *str) //Função que armazena permutações. {

   fputs(str, out);
   fputs("\n",out);

}

struct TDados{ //struct com variáveis.

char nick_usuario[50];
char senha[50];
char uso_da_senha[50];

};

void ler_dados(struct TDados aux) //Função que lê dados. { printf("==========DADOS LIDOS==========\n"); printf("Nick do usario:%s\n",aux.nick_usuario); printf("Uso da senha:%s\n",aux.uso_da_senha); } int main() { struct TDados dados;

   char *password; //Variáveis da função main.

int ver_senha;

printf("==========ESCREVA SEUS DADOS==========\n"); printf("Digite o nick do seu usario: "); scanf("%[^\n]", dados.nick_usuario); printf("Digite o motivo a qual irá usar a senha: "); scanf("%s",dados.uso_da_senha); printf("Para captura de caracteres especiais apenas os de 1 a 9 do teclado exceto disso o programa não irá ser exucutado\n"); password = getpass("Digite a senha para verifiação se ela é forte: ");

ler_dados(dados); //chamada da função ler_dados. strcpy(dados.senha,password); subs_n_s(dados.senha); //Chamada função subs_n_s.

vef1(dados.senha); //Chamada função vef1. vef2(dados.senha); //Chamada função vef2. vef3(dados.senha); //Chamada função vef3.

printf("Deseja ver sua senha?...1 para sim , 2 para não\n"); scanf("%d",&ver_senha);

if (ver_senha == 1) { printf("%s\n",password); } else if(ver_senha == 2) { printf("Programa encerrado...\n"); } else { printf("Comando não encontrado,reinicie o programa...\n"); } }


</syntaxhighlight>