Google

quarta-feira, 7 de maio de 2014

Algoritmo para calcular a força da senha

Especificação do algoritmo N = tamanho da senha; C = cardinalidade inicialmente com valor zero e conforme as regras abaixo soma-se os valores para a cardinalidade (C); Se possuir letras minuscula então soma 26 a C; Se possuir letras MAIUSCULAS então soma mais 26 a C; Se possuir numeros então soma mais 10 a C; Se possuir símbolos então soma mais 73 a C; Cardinalidade mínima = 10; Cardinalidade máxima = 135; E = N * log2(C)(Entropia) Entropia mínima. E = 8 * log2(10) = 8 * 3.32 = 26,56 Entropia máxima. E = 20 * log2(135) = 20 * 7.07 = 141,40 Aplicamos a regra de 3 com sendo o máximo 141,40 para notas de 0 a 10 para o resultado da força.

#define _GNU_SOURCE
#include <stdio.h>
#include <math.h>
#include <ctype.h>
#include <string.h>

//gcc -o forca_senha -lm forca_senha.c
int main(int argc, char *argv[]){
        int n = 0; //tamanho da senha
        int c = 0; //cardinalidade
        float e = 0.0; //entropia
        int i = 0;
        char *senha = NULL;

    if(!argv[1]){
        printf("Argumento não informado!!\n\n");
        return -1;
    }

        senha = argv[1];
    printf("Calcular Forca da senha[%s]..\n\n",argv[1]);

        n  = strlen(senha);
    printf("%s:[%s.%d] - Tamanho da senha[%d].\n", __FILE__,__FUNCTION__,__LINE__,n);

        for(i = 0; *(senha+i) != '\0'  ; i++){
                if(isupper(senha[i])){
                        printf("%s:[%s.%d] - Possui letra Maiuscula. %c\n", __FILE__,__FUNCTION__,__LINE__,senha[i]);
                        c = 26;
                        break;
                }
        }

        for(i = 0; *(senha+i) != '\0'  ; i++){
                if(islower(senha[i])){
                        printf("%s:[%s.%d] - Possui letra Minuscula. %c\n", __FILE__,__FUNCTION__,__LINE__,senha[i]);
                        c = c + 26;
                        break;
                }
        }

        for(i = 0; *(senha+i) != '\0'  ; i++){
                if(isdigit(senha[i])){
                        printf("%s:[%s.%d] - Possui numeros. %c\n", __FILE__,__FUNCTION__,__LINE__,senha[i]);
                        c = c + 10;
                        break;
                }
        }

        for(i = 0; *(senha+i) != '\0'  ; i++){
                if(ispunct(senha[i])){
                        printf("%s:[%s.%d] - Possui caracteres especiais. %c\n", __FILE__,__FUNCTION__,__LINE__,senha[i]);
                        c = c + 73;
                        break;
                }
        }

        char aux[50];
        e = n * log2(c);
        e = (e*10) / 141.40;

        snprintf(aux,sizeof(aux),"%.0f",e);

        printf("%s:[%s.%d] - Cardinalidade[%d].\n", __FILE__,__FUNCTION__,__LINE__,c);
        printf("%s:[%s.%d] - Forca da senha[%s].\n", __FILE__,__FUNCTION__,__LINE__,aux);
        printf("%s:[%s.%d] - Fim Calcular Forca Senha.\n", __FILE__,__FUNCTION__,__LINE__);

    return 0;
}

segunda-feira, 1 de julho de 2013

Site com anúncio de shows, eventos, festas.

Pessoal além de programar merecemos um momento de lazer e nada melhor que encontrar tudo isso em único lugar. Encontrei esse site que promete reunir tudo isso e de maneira muito fácil. Ainda não está no ar mas você pode deixar o seu email para ser avisado quando for lançado.

facebook: http://www.facebook.com/oficialbaladay
twitter: @OficialBaladay
Site: http://www.baladay.com.br

Função para alterar/remover caracteres de um array em C

Essa função mostra um exemplo de como tratar caracteres em C, uma das aplicações para este tipo de função é realizar a validação de emails, usernames removendo caracteres especiais ou alterando por outro valor, conforme necessidade. Note que para teste, realizei apenas a troca de Maiúsculas por Minúsculas, mas podemos utilizar a função toupper(), conforme outras publicações. É mais viável para remover acentuação.
ex: "áãàéê" por "aaaee".

#include 
#include 
void *remove_carac_especial(char *valor){
 char *carac = ".,_";
 int i;
 char *n = NULL;
 char *szTabO = "mrcsrsnodalte";
 char *szTabD = "MRCSRSNODALTE";
 printf("string informada:%s\n",valor);
 for(i=0;i>> %s<<<\n\n",valor);

 return valor;
}
int main(int argc, char *argv[]){
 int i = 0;
 char *ret = NULL;
 if(!argv[1]){
  printf("Argumento não informado!!\n\n");
  return -1;
 }
 ret=remove_carac_especial(argv[1]);
 printf("Ret = [%s]\n",ret);
 return 0;
}
./remove_carac 'marcos_rosendo.dalte'
resposta: MARCOS ROSENDO DALTE

Postagens populares