Ricardo, aqui vai uma sugestão, em duas partes.
Primeiro: trocar por * o que se digita. Se não me engano, tem uma máscara no GET que esconde o que se digita. Eu tentei usar, não consegui fazer funcionar direito, aí fiz uma solução caseira.
Código: Selecionar todos
senha:=""
do whil len(senha)<=5 // imaginando a senha com 5 dígitos
inkey(0)
lk=lastkey()
if lk=27
exit // o usuário desistiu de entrar a senha
endi
if !((lk>47 .and. lk<58) .or. (lk>96 .and. lk<123) .or. ((lk>64 .and. lk<91) // 0/9 a/z A/Z
* Erro = digite apenas números ou letras
loop
endi
senha:=senha+lower(chr(lk)) // guarda em minúsculas (veja o SEGUNDO item)
* agora mostra na tela o que já foi digitado, mas em asteriscos
@x,y say pad(repl("*",len(senha)),5)
endd
if lk=27
retu // controlar pra onde isso vai retornar
endi
* continua, repetindo tudo pra confirmar a senha
* ou grava a senha no DBF ou o que for
Segundo: onde guardar as senhas. Se vc for usar um DBF, é melhor encriptar. Eu, quando precisei disso, andei olhando as funções que existiam, no fim achei melhor criar a minha própria encriptação. Não é nenhuma brastemp, o Snowden quebraria fácil, mas funcionou com meus clientes.
mix("senha","F") -> fecha, retorna a expressão "senha" encriptada -> "akfd9"
mis("akfd9","A") -> abre, retorna a expressão "akfd9" desencriptada -> "senha"
O resultado "akfd9" é só um exemplo.
Usei só minúsculas e números. Pode-se incluir outros caracteres.
Se mudar a ordem dos caracteres na "chave", muda a encriptação.
Testei a função quanto a possíveis repetições e não encontrei erro.
Código: Selecionar todos
FUNCTION mix(quem,aaaa)
priv chave,t,cripto,x,y,chave2
chave="hda7f1gi2kj8qmbn3oerp4sz9uv5wcxt0y6"
if aaaa="F" // encripta
t=""
for x=len(quem) to 1 step -1
t=t+substr(quem,x,1)
next
quem=t
cripto=substr(quem,1,1)
for x=1 to (len(quem)-1)
y=at(right(cripto,1),chave)
chave2=substr(chave,y,len(chave))+substr(chave,1,y-1)
y=at(substr(quem,x+1,1),chave)
cripto=cripto+substr(chave2,y,1)
next
elseif aaaa="A" // desencripta
cripto=""
for x=(len(quem)-1) to 1 step -1
y=at(substr(quem,x,1),chave)
chave2=substr(chave,y,len(chave))+substr(chave,1,y-1)
y=at(substr(quem,x+1,1),chave2)
cripto=substr(chave,y,1)+cripto
next
cripto=substr(quem,1,1)+cripto
t=""
for x=len(cripto) to 1 step -1
t=t+substr(cripto,x,1)
next
cripto=t
endi
retu cripto