Ola Amigos
Boa Noite
Preciso de uma ajuda dos amigos, preciso de uma rotina basica, para criar e fazer menutenção de senhas,
incluindo a troca de caracteres, no sentido de não aparecer os caracteres originais, trocar por ´*´.
Uma rotina onde na criação de digite duas vezes a senha para confirmar, testando se a 1a. é igual a 2a.digitada.
Nada de muita complicação.
Atencciosamente
Rotina de criação e manutenção de senha
Moderador: Moderadores
- Ricardo Sales Ribeiro
- Usuário Nível 3

- Mensagens: 279
- Registrado em: 13 Jul 2004 18:06
- Localização: Fortaleza-Ceara
Rotina de criação e manutenção de senha
Colega ve se te ajuda...
Código: Selecionar todos
***************************************************************************
FUNCTION CadastraUser()
LOCAL nLocalRecno:=RECNO(), cSenhac2, cSenhac1
LOCAL cTela := SAVESCREEN(00,00,24,79)
WHILE .T.
Box(12,15,17,61, moldura, CorNormal, "Inclus„o de Usu rio"), CorMensag)
SETCOLOR(CorNormal)
@ 15,17 SAY "Senha................:"
@ 16,17 SAY "Digite Novamente.....:"
WHILE .T.
@ 15,17 SAY "Senha................:"
cCampoSenha := PedeSenha(15,40,5)
cSenhac1 := PedeSenha(16,40,5)
IF LASTKEY()==K_ESC
EXIT
ENDIF
IF cCampoSenha != cSenhac1
Bell(8)
ALERT("Senha nao confere digite novamente!", {" Pressione Enter "}, CorMensag)
LOOP
ELSE
EXIT
ENDIF
ENDDO
IF LASTKEY()==K_ESC
Usuario->( BloqReg(0) )
Usuario->( dbDELETE() )
Usuario->( DesBloqReg() )
EXIT
ENDIF
IF Ok()
cCampoSenha := HB_Crypt()(cCampoSenha)
Usuario->( Bloqreg(0) )
//GravaUsuario()
nLocalRecno:=RECNO()
ELSE
Usuario->( Bloqreg(0) )
Usuario->( DBDELETE() )
Usuario->( DesBloqReg() )
ENDIF
ENDDO
RESTSCREEN(00,00,24,79,cTela) ; DBGOTO(nLocalRecno)
RETURN NIL
********************************************************************************
FUNCTION PedeSenha(nLinha, nColuna, nTamanhoSenha)
LOCAL I, nTecla, cSenha:= "", nCursor:=SETCURSOR(0)
BELL(9)
@ nLinha, nColuna Say "[" + Replicate("ú", nTamanhoSenha) + "]"
FOR I:=1 TO nTamanhoSenha
nTecla := InKey(50)
IF (nTecla == 8) //BackSpace
IF (I > 1)
I--
@ nLinha, nColuna + I Say "ú"
cSenha := Left(cSenha, I - 1)
ENDIF
I--
ELSE
IF nTecla == 7 // Se for delete nÆo faz nada
Loop
ENDIF
IF (nTecla == 13 .OR. nTecla == 27) // Se ENTER ou ESC sai
Exit
EndIf
cSenha := cSenha + Chr(nTecla)
@ nLinha, nColuna + I Say "*" // vai preenchendo a cada caracter com o s¡mbolo
ENDIF
NEXT
SETCURSOR(nCursor) // Restabelece o Cursor
RETURN Upper(cSenha) + Space(nTamanhoSenha - Len(cSenha))
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
Rotina de criação e manutenção de senha
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.
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.
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- Vander
- Usuário Nível 3

- Mensagens: 214
- Registrado em: 23 Jul 2004 01:43
- Localização: João Monlevade - MG
Rotina de criação e manutenção de senha
Veja em download
https://pctoledo.org/forum/fileba ... t=s&page=1
e
https://pctoledo.org/forum/fileba ... t=s&page=2
Vander
https://pctoledo.org/forum/fileba ... t=s&page=1
e
https://pctoledo.org/forum/fileba ... t=s&page=2
Vander
HbMake v1.17
xHarbour build 0.99.70 Intl. (SimpLex)
Borland C++ 5.5.1
fivewin 6.12 (FREE)
Workshop 4.5
MEdit
xHarbour build 0.99.70 Intl. (SimpLex)
Borland C++ 5.5.1
fivewin 6.12 (FREE)
Workshop 4.5
MEdit
- Ricardo Sales Ribeiro
- Usuário Nível 3

- Mensagens: 279
- Registrado em: 13 Jul 2004 18:06
- Localização: Fortaleza-Ceara
Rotina de criação e manutenção de senha
Bom Dia amigos
Agradeço d+ pela ajuda, já baixei os exemplos e vou estuda-los e adapta-los a minha necessidade.
Atenciosamente
Gde Abraço
Agradeço d+ pela ajuda, já baixei os exemplos e vou estuda-los e adapta-los a minha necessidade.
Atenciosamente
Gde Abraço
