Entropia de Senha
Enviado: 12 Ago 2023 02:05
Ola!
Segue codigo para calculo de Entropia de Senha:
compilar:
hbmk2 mpentropia.prg
Att.
Mauricio
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
Mauricio