Página 1 de 1
Pq "1a2b3c" é igual a "1a2b3caa"??
Enviado: 13 Mar 2007 03:03
por Romega
Estou fazendo uma rotina simples para restringir acesso somente com senha. Supondo que a senha correta seja "1a2b3c", se eu digitar qualquer coisa da senha errada, se eu digitar a senha correta funciona normalmente. Mas se eu digitar "1a2b3casdada" tb funciona...
PQ????
Ou seja, ele analisa se a senha correta está dentro da senha digitada e não se a senha correta é exatamente igual a senha digitada...
Valeu pela ajuda...
Segue codfon...
Código: Selecionar todos
local ink := 0
local senre := "1a2b3c"
local senink := space(0)
local tempink := space(2)
local contink := 39
@ 8,13 to 14,61
@ 10,15 say "----> Sistema de Controle Financeiro Pessoal."
@ 12,15 say " Senha de Acesso:"
set color to n/w
@ 12,40 clear to 12,49
do while ink<>13
if contink>48
exit
else
contink := contink + 1
end if
ink := inkey(0)
@ 12,contink say "*"
tempink := chr(ink)
senink := senink + tempink
end do
if senink==senre
? "Senha correta"
inkey(0)
elseif senink<>senre
? "Senha incorreta"
quit
end if
Enviado: 13 Mar 2007 07:50
por Clipper
Prezado Colega
Veja como eu fiz, e funcionou.
Código: Selecionar todos
local ink := 0
local senre := "1a2b3c"
local senink := space(0)
local tempink := space(2)
local contink := 39
cls
@ 8,13 to 14,61
@ 10,15 say "----> Sistema de Controle Financeiro Pessoal."
@ 12,15 say " Senha de Acesso:"
set color to n/w
@ 12,40 clear to 12,49
do while .t.
if contink>48
exit
else
contink := contink + 1
end if
ink := inkey(0)
if ink=13
exit
endif
@ 12,contink say "*"
tempink := chr(ink)
senink := senink + tempink
end do
if senink==senre
? "Senha correta"
inkey(0)
else
? "Senha incorreta"
quit
end if
Até logo.
Marcelo
Enviado: 13 Mar 2007 08:04
por Clipper
Prezado Colega
Uma opção mais profissional seria o uso da claúsula PASSWORD ao GET.
Para adicionar a opção de PASSWORD no GET.
Compile e linke com sua aplicação o PRG que está no link abaixo, faça também a chamada dos arquivos CH que vão juntos.
www.phrep.com.br/getpass.zip
Agora você pode colocar assim para campos de senha :
SENHA=SPACE(10)
@ 10,25 GET SENHA PASSWORD PICT "XXXXXXXXXX"
ou
SENHA=SPACE(10)
@ 10,25 GET SENHA PASSWORD PICT "@!"
Você poderá usar BACKSPACE para desfazer uma digitação errada
Pode-se também mudar o caractere que aparece no lugar da senha
Até logo.
Marcelo
Enviado: 13 Mar 2007 08:06
por Maligno
O contrário de
senink==senre é
!senink==senre. Assim a comparação é exata.
[]'s
Maligno
http://www.buzinello.com/prg
Enviado: 13 Mar 2007 08:23
por Pablo César
Eu ja estava por responder quando vi a tua resposta MARCELO e agora do MALIGNO.
Caro Romega, basicamente o colega Marcelo resolveu a questão por causa da concatenação da sua senha. No seu código-fonte o <Enter> tmabém era concatena no final da variavel senink. Experimente colocando alert(">"+senink+"<") após o seu do while e verá um caracter a mais no final da senha digitada. Sugiro você fazer o tratamento de todas as teclas que o usuário possa digitar. Teclas como:
BACKSPACE: para corregir apagado de trás pra frente
F1: chamar o help
Só aceitar maiusculas, assim o usuário não se bate tanto. ?? (a seu critério)
ESC: para o usuário sair sem poder acessar
F10: por exemplo para poder gerar uma contra-senha
Acostume ao seu usuário com o mesmo padrão de saidas e entradas. Isto é, padronize sempre a forma que você faria para sair, incluir, editar, deletear, etc... Isso fará que o usuário seja adestrado melhor... hehehe (uma brincadeirinha... hihi)
Também aconselho, você de nunca colocar a senha (mestre) no proprio código-fonte (porque pode ser alterada editando o executável). Faça dentro de um dbf com cadastro de usuarios. Fica uma coisa personalizada. Escripte as senhas e grave no DBF. Não utilize o nome de SENHAS.DBF (isto chama a atenção). Faça pelo menos 2 níveis de acesso, um operacional e outro gerencial. E faça num looping com número de tentativas esgotadas quando erra a senha, mas dê uma mensagem. As mensagens faça no rodapé da sua aplicação.
Eu espero ter te insentivado a tua imaginação. Sei que seu código era de testes.
Um clip-abraço :)Pos
Enviado: 13 Mar 2007 08:46
por Maligno
Pablo César escreveu:Também aconselho, você de nunca colocar a senha (mestre) no proprio código-fonte
Realmente. Senha em fonte, jamais.
Escripte as senhas e grave no DBF.
Não é o mais usual. O que normalmente se faz é armazenar apenas o hash do log-in. No log-in é calculado o hash e comparado com o que está armazenado. Claro que dificilmente alguém vai se dispor a quebrar a proteção da senha gravada, mas é um bom hábito armazenar apenas o hash. O mais popular, me parece, é o MD5. Mas pode-se usar qualquer outro. O CRC32 (menos eficiente) usa só 8 caracteres, enquanto o MD5 consome 32.
[]'s
Maligno
http://www.buzinello.com/prg
Enviado: 13 Mar 2007 09:19
por Pablo César
Maligno escreveu:O que normalmente se faz é armazenar apenas o hash do log-in... O mais popular, me parece, é o MD5. Mas pode-se usar qualquer outro.
Puxa, LEGAL ! Eu ja faço algo parecido mas não quis mencionar porque iria complicar pro colega. Mas seria muito bom saber onde podemos encontar o MD5 (conceito:
http://pt.wikipedia.org/wiki/MD5) que possa utiizar com o Clipper ?. Você poderia dar um exemplo básico ?.
Um clip-abraço :)Pos
Enviado: 13 Mar 2007 09:37
por Maligno
Pablo César escreveu:Mas seria muito bom saber onde podemos encontar o MD5 (conceito:
http://pt.wikipedia.org/wiki/MD5) que possa utiizar com o Clipper ?. Você poderia dar um exemplo básico ?.
Já tinha disponibilizado antes. Veja a
thread a respeito. Para detalhes, leia o README que está no ZIP.
[]'s
Maligno
http://www.buzinello.com/prg
HASH ?
Enviado: 13 Mar 2007 09:44
por Netavin
Bom dia malígno !
Que é isso !!! Dá uma chance para os novatos ! O que é Hash ?
Abraço!
Netavin.
Re: HASH ?
Enviado: 13 Mar 2007 09:57
por Maligno
Netavin escreveu:Que é isso !!! Dá uma chance para os novatos ! O que é Hash ?
Primeiro dê a você mesmo essa chance. Afinal, você tem um mundo inteiro na ponta dos dedos.

))
Clique no link:
http://pt.wikipedia.org/wiki/Hash
[]'s
Maligno
http://www.buzinello.com/prg
Hash
Enviado: 13 Mar 2007 11:37
por Netavin
... valeu Maligno !!! Somei mais um grãozinho ao meu conhecimento.
Gostei do seu estilo: ensinar a pegar o peixe; não pescá-lo.
[]´s
Netavin.
Re: Hash
Enviado: 13 Mar 2007 11:41
por Pablo César
Netavin escreveu:ensinar a pegar o peixe; não pescá-lo.
É isso aí NETAVIN, senão o pessoal fica muito acomodado. E o verdeiro objetivo de tudo isto, é aprender a como fazer e não copiar somente.
Um clip-abraço :)Pos
Enviado: 23 Mar 2007 13:43
por Eolo
Romega,
Respondendo especificamente a sua pergunta: quando vc usa "=" para comparar dois strings, o tamanho deles não é comparado, só o conteúdo, e ainda assim a comparação é limitada ao tamanho do menor string. Por isso "1a2b3c" é igual a "1a2b3caa" (os 6 primeiros caracteres são iguais).
Se vc usar "==", mata o problema:
"1a2b3c"= "1a2b3caa" -> .t.
"1a2b3c"=="1a2b3caa" -> .f.
porque tanto o tamanho quanto o conteúdo têm que ser iguais.
Eolo