Entropia de Senha

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
mauricioportela
Usuário Nível 2
Usuário Nível 2
Mensagens: 95
Registrado em: 29 Jul 2016 04:22
Localização: Vitoria da Conquista/Bahia

Entropia de Senha

Mensagem por mauricioportela »

Ola!

Segue codigo para calculo de Entropia de Senha:

compilar:

hbmk2 mpentropia.prg

Código: Selecionar todos

/**

    Entropia de Senha
    -----------------

    Funcao:
        EntropiaSenha( xcSenha )
    
    Parametro:
        xcSenha - A senha passada para o calculo.
    
    Retorna:

    Valor da Entropia | Categoria
    ------------------+--------------------------
         0 ate 24     | Senha Pobre
        25 ate 49     | Senha Fraca
        50 ate 74     | Senha Regular
        maior que 75  | Senha Forte

**/

#include "box.ch"
#include "inkey.ch"

FUNCTION Main()
    LOCAL xcSenha := SPACE(50)
    LOCAL nResultado
    LOCAL cCorTipoSenha := ""

    CLS
    @ 0, 2 SAY "Entropia de Senha"
    
    WHILE .T.
        xcSenha    := SPACE(50)
        nResultado := 0
        @ 1, 0, MaxRow(), MaxCol() BOX SPACE(9)
        @ MaxRow(), 0 SAY "ESC - Sair                   "
        @ 2, 2 SAY "Digite uma senha:"
        @ 3, 2 GET xcSenha
        READ
        IF LASTKEY() == K_ESC
            EXIT
        ENDIF
        nResultado := Entropia_Senha( xcSenha )
        IF nResultado <= 24
            cPesoSenha := "Senha Pobre"
            cCorTipoSenha := "GR+/R"
        ELSEIF nResultado >= 25 .AND. nResultado <= 49
            cPesoSenha := "Senha Fraca"
            cCorTipoSenha := "R+/N"
        ELSEIF nResultado >= 50 .AND. nResultado <= 74
            cPesoSenha := "Senha Regular"
            cCorTipoSenha := "GR+/N"
        ELSEIF nResultado >= 75
            cPesoSenha := "Senha Forte"
            cCorTipoSenha := "G+/N"
        ENDIF

        @ 5, 2 SAY "A Entropia dasenha digitada: "
        cCor := SETCOLOR()
        SETCOLOR( cCorTipoSenha )
        @ 5, COL()+1 SAY cPesoSenha
        SETCOLOR( cCor )
        @ 6, 2 SAY nResultado
        @ MaxRow(), 0 SAY "Tecle ENTER para continuar..."
        INKEY(0)
    ENDDO
RETURN Nil

FUNCTION Entropia_Senha( xcSenha )
    LOCAL nTamanho      := LEN(ALLTRIM(xcSenha))
    LOCAL nFaixa        := 0
    LOCAL nTemMaiusculo := 0
    LOCAL nTemMinusculo := 0
    LOCAL nTemNumero    := 0
    LOCAL nRetorno      := 0
    FOR x := 1 TO nTamanho
        nTemMaiusculo += iif( IsUpper(SUBSTR(xcSenha, x, 1)), 1, 0 )
        nTemMinusculo += iif( IsLower(SUBSTR(xcSenha, x, 1)), 1, 0 )
        nTemNumero    += iif( IsDigit(SUBSTR(xcSenha, x, 1)), 1, 0 )
    NEXT
    nFaixa += iif( nTemMaiusculo > 0, 26, 0 )
    nFaixa += iif( nTemMinusculo > 0, 26, 0 )
    nFaixa += iif( nTemNumero    > 0, 10, 0 )
    nRetorno := nTamanho * log2(nFaixa * 2)
RETURN nRetorno


FUNCTION log2( n )
    LOCAL nResultado := 0
    IF n <= 0
        RETURN -1
    ENDIF
    WHILE n > 1
        n /= 2
        nResultado += 1
    ENDDO
RETURN nResultado

Att.
Mauricio
Anexos
Senha Forte
Senha Forte
Senha Fraca
Senha Fraca
mpentropia.prg
codigo
(2.64 KiB) Baixado 79 vezes
Responder