Página 1 de 1

GERENCIAMENTO DE SENHAS NO CLIPPER

Enviado: 27 Nov 2007 10:21
por vagner_cip
Olá a todos

Estou com problemas com gerenciamento de senhas, tenho um conjunto de sistemas de utiliza um gerenciados de senhas criado em dbf, mas as senhas são vísiveis a qualquer um que abrir o banco, gostaria de saber se alguem tem uma idéia de como eu posso proteger este banco ou desenvolver outro mais seguro.

Eu pensei em usar a mesma senha do windows para logar no prog mas não sei como fazer isso.

alguém pode me dar uma luz.

Muito grato.

Enviado: 27 Nov 2007 10:24
por Maligno
A bem da verdade, não se costuma armazenar senha. O usual é que você some as strings scorrespondentes ao nome e senha, calcule seu hash (pode ser MD5 - o mais usual nessa área) e armazene a string resultante. Ao obter o log-in, repete-se o processo e compara-se o resultado com o hash armazenado.

Enviado: 27 Nov 2007 10:29
por alaminojunior
Voce pode criptografar os campos que contenham as senhas.
Existem muitas ferramentas para isso. Uma delas é a função Crypt() da CaTools,
existe também uma função do nosso amigo Maligno CRC32().

Só para exemplificar:
Em xHarbour fiz uma rotina que pega a senha digitada pelo usuario e criptografa com a função HB_MD5(), ficou o bicho !!!

Ah claro, se o problema é na hora de digitar, use a clausula 'Password" nos get´s, que ela mostra asteriscos na digitação.

Senhas

Enviado: 27 Nov 2007 10:31
por vagner_cip
não entendi nada ?

Enviado: 27 Nov 2007 10:32
por Maligno
alaminojunior escreveu:Voce pode criptografar os campos que contenham as senhas. Existem muitas ferramentas para isso. Uma delas é a função Crypt() da CaTools, existe também uma função do nosso amigo Maligno CRC32().
CRC32 é outro hash. Não é muito utilizado pra isso.
Só para exemplificar:
Em xHarbour fiz uma rotina que pega a senha digitada pelo usuario e criptografa com a função HB_MD5(), ficou o bicho !!!
É isso. Exatamente o que eu disse. Armazena-se o hash e mais nada. No log-in, é só repetir o cálculo e comparar com o hash gravado. Simples de tudo. :)

Enviado: 27 Nov 2007 10:32
por alaminojunior
Depois dessa, permita me dizer o mesmo.

crc32()

Enviado: 27 Nov 2007 10:35
por vagner_cip
onde posso conseguir esta função crc32()

Re: Senhas

Enviado: 27 Nov 2007 10:36
por Maligno
vagner_cip escreveu:não entendi nada ?
Exemplo simples: você tem o nome de log-in na variável cName e a senha na variável cPass. Calcule o hash MD5 para a string que soma essas variáveis: cHash = CalcMD5(cName+cPass). Essa variável cHash conterá algo como "00C91E8CA42D4E240B4207F0CB5CBE27", que é uma string típica do MD5. Armazene isso. No que o usuário fizer o log-in novamente, repita o processo e compare a string desse hash com a string que você armazenou. Detalhe: letras maiúsculas e minúsculas fazem diferença no cálculo do hash.

Re: crc32()

Enviado: 27 Nov 2007 10:37
por Maligno
vagner_cip escreveu:onde posso conseguir esta função crc32()
No link http://pub.buzinello.com/index.php?d=./ ... r/sources/ você tem o CRC32. Mas ele não é o que se recomanda para esse tipo de serviço, pois é um algoritmo considerado muito fraco pra isso.

No link http://pub.buzinello.com/index.php?d=./ ... pper/libs/ você tem o arquivo MD5.ZIP. Ele é melhor pra isso. No ZIP tem tudo explicado.

Muito Grato a todos

Enviado: 27 Nov 2007 10:41
por vagner_cip
Muito Grato a todos

Enviado: 27 Nov 2007 10:41
por alaminojunior
CRC32 é outro hash. Não é muito utilizado pra isso.
É bem verdade, esta função transforma tudo num bloco de 8 bits, fácil de haver coincidencias. Já a MD5 é 32 bits, mais chique.

Enviado: 27 Nov 2007 17:13
por jairfab
Encript ficaria mais ou menos assim

Function ENCRYPT(Arg1, Arg2, Arg3) /// Cryptografa texto

Local Local1, Local2
Local1:= ""
Arg3:= IIf(ValType(Arg3) == ValType(120) .AND. Arg3 != Nil, Arg3, ;
120)
Arg2:= IIf(ValType(Arg2) == ValType(.F.) .AND. Arg2 != Nil, Arg2, ;
.F.)
If (ValType(Arg1) = "C")
If (Arg2)
For Local2:= Len(Arg1) To 1 Step -1
Local1:= Local1 + Chr(Asc(SubStr(Arg1, Local2, 1)) + Arg3)
Next
Else
For Local2:= 1 To Len(Arg1)
Local1:= Local1 + Chr(Asc(SubStr(Arg1, Local2, 1)) + Arg3)
Next
EndIf
EndIf
Return Local1

Para Gravar no banco de Dados:
Replace SENHA with Encrypt(WSENHA)
Replace ACESSOS with Encrypt(WACESSOS)

Enviado: 27 Nov 2007 17:17
por jairfab
********************************
Function DECRYPT(Arg1, Arg2, Arg3) /// Descriptografa texto

Local Local1, Local2, Local3
Local1:= ""
Local2:= 0
Arg3:= IIf(ValType(Arg3) == ValType(120) .AND. Arg3 != Nil, Arg3, ;
120)
Arg2:= IIf(ValType(Arg2) == ValType(.F.) .AND. Arg2 != Nil, Arg2, ;
.F.)
Arg3:= IIf(Arg3 > 128, Arg3 % 128, Arg3)
If (ValType(Arg1) = "C")
If (Arg2)
For Local3:= Len(Arg1) To 1 Step -1
Local1:= Local1 + Chr(Asc(SubStr(Arg1, Local3, 1)) - Arg3)
Next
Else
For Local3:= 1 To Len(Arg1)
Local1:= Local1 + Chr(Asc(SubStr(Arg1, Local3, 1)) - Arg3)
Next
EndIf
EndIf
Return Local1