Rotina de criação e manutenção de senha

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Ricardo Sales Ribeiro
Usuário Nível 3
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

Mensagem por Ricardo Sales Ribeiro »

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
Ricardo Sales
Fortaleza-Ce
lodara53@yahoo.com.br
lodara53@hotmail.com
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Rotina de criação e manutenção de senha

Mensagem por fladimir »

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.
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Rotina de criação e manutenção de senha

Mensagem por Eolo »

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
Avatar do usuário
Vander
Usuário Nível 3
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

Mensagem por Vander »

HbMake v1.17
xHarbour build 0.99.70 Intl. (SimpLex)
Borland C++ 5.5.1
fivewin 6.12 (FREE)
Workshop 4.5
MEdit
Avatar do usuário
Ricardo Sales Ribeiro
Usuário Nível 3
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

Mensagem por Ricardo Sales Ribeiro »

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
Ricardo Sales
Fortaleza-Ce
lodara53@yahoo.com.br
lodara53@hotmail.com
Responder