Almacenar contraseñas con FWH MySQL/MariaDB

Post Reply
Adolfredo Martinez
Posts: 33
Joined: Fri Feb 15, 2019 1:37 pm
Location: Aracataca-Colombia

Almacenar contraseñas con FWH MySQL/MariaDB

Post by Adolfredo Martinez »

Hola Amigos del forum.


Necesito almacenar contraseña con la clase fwh mysql/mariadb, utilizando el algorismo AES
y averiguando encontré esto:
Para encriptar
INSERT INTO usuarios VALUES('usuario',AES_ENCRYPT('contraseña','llave'));
Para desencriptar:
INSERT INTO usuarios VALUES('usuario',AES_DECRYPT('contraseña','llave'));

Como llevo estas lineas a la clase o un ejemplo.

Gracias por la atención prestada


Adolfredo martinez
Adolfredo Martinez
Posts: 33
Joined: Fri Feb 15, 2019 1:37 pm
Location: Aracataca-Colombia

Re: Almacenar contraseñas con FWH MySQL/MariaDB

Post by Adolfredo Martinez »

Amigos del Forum.

Lo que busco es algo como esto, que hice en tablas DBF:


#include "FiveWin.ch"
*-----------------
func Main()
*-----------------
local oDlg, oGet02,oGet01,oGet03,oFont,clavencriptada:=space(20),claveDecriptada:=space(20)
local cPassword:=SPACE(20),oSay
local oBoton,oBoton2,cChave := 'AMFSOFT',cnombre:=space(33),lEncriDescri := .F.,lSalir := .F.

DEFINE FONT oFont NAME "Tahoma" SIZE 0, -12


DEFINE DIALOG oDlg ;
FROM 5, 5 TO 15, 60 ;
TITLE "Por Favor Identifiquese" ;
FONT oFont
oDlg:lHelpIcon := .f.


@ 1, 2 SAY "Nombre del Usuario:" OF oDlg
@ 1, 10 GET oGet01 VAR cnombre OF oDlg

@ 2, 2 SAY "Digite sus clave para ingresar..." OF oDlg
@ 3, 2 GET oGet02 VAR cPassword OF oDlg PASSWORD

@ 3, 5 BUTTONBMP oBoton PROMPT "Encrytar" OF oDlg size 50,20 ;
ACTION ( lEncriDescri := .T. , oDlg:End() )

@ 3, 15 BUTTONBMP oBoton2 PROMPT "Salir" OF oDlg size 40,20 ;
ACTION ( lSalir := .T. , oDlg:End() )


ACTIVATE DIALOG oDlg CENTER ON INIT oGet01:SetFocus()

IF lEncriDescri
clavencriptada := hb_crypt(cPassword, cChave)
msginfo(clavencriptada,"encrypt")

claveDecriptada :=hb_Decrypt(clavencriptada,cChave)
msginfo(claveDecriptada,"decrypt")
ENDIF

IF lSalir
Return Nil
endif

RETURN( NIL)


Como seria hacer esto pero con la clase FWH Mysql/Mariadb
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Almacenar contraseñas con FWH MySQL/MariaDB

Post by FranciscoA »

Hola Adolfredo.
Mira si este codigo, tomado parcialmente de uno de mis sistemas, te sirve de guia.
Utilizo MySql - TMySql. Las funciones de encriptacion y decriptacion son de FW.

Code: Select all

//-------------------------------------//
Function lAutorizado()
local oDlg,oBt1,oBt2, oCbx, oPw, cItems:={},cVar, cPw, lOK:=.f., lAutoriza:=.f.
local oUsuarios:= oServer:Query( "SELECT * FROM usuarios" )

oUsuarios:GoTop()
While !oUsuarios:eof()
   aadd(cItems,oUsuarios:nombre)
   oUsuarios:Skip()
Enddo

cPw:=space(len(oUsuarios:codigo))
cVar:=cItems[1]

DEFINE DIALOG oDLG RESOURCE "USUARIOS" 

REDEFINE ComboBox oCbx VAR cVar ID 103 OF oDLG ITEMS cItems ;
         ON CHANGE (oCbx:GotFocus(),oCbx:Refresh())
REDEFINE GET oPw VAR cPw ID 202 OF oDLG
REDEFINE BUTTONBMP oBt1 ID 312 OF oDLG BITMAP "ACEPTAR"  TEXTRIGHT  ACTION (lOK:=.t.,oDlg:End())
REDEFINE BUTTONBMP oBt2 ID 313 OF oDLG BITMAP "CANCELAR" TEXTRIGHT  ACTION (lOK:=.f.,oDlg:End())

ACTIVATE DIALOG oDlg CENTERED 
if lOK
   cPw := Encrypt(cPw,"AMFSOFT") 
   oUsuarios:Gotop()
   oUsuarios:Locate( "Codigo", cPw )   //Busca PW en col usuarios:codigo

   IF oUsuarios:nombre = cVar .and. oUsuarios:Codigo = cPw
      lAutoriza:=.t.
   ELSE
      lAutoriza:=.f.
      MsgStop("Acceso Denegado.","Alto")
   ENDIF
endif
   oUsuarios:End()

RETURN lAutoriza

//---------------------------------------// Agregar usuario, o modificarlo
Function UsuarConf(lAppend,oUsuarios)
local oDlg,oNomb,oCodi,oCodi2, lOK:=.f., oUsers, n
local cNomb,cCodi
local nRecno:=oUsuarios:Recno()

if lAppend
   oUsuarios:GoBottom()
   nNumUser := oUsuarios:NumUser + 1
   cNomb    := space(len(oUsuarios:nombre))
   cCodi    := oUsuarios:codigo
else
   nNumUser := oUsuarios:NumUser 
   cNomb    := oUsuarios:nombre
   cCodi    := Decrypt( oUsuarios:codigo, "AMFSOFT" )
endif

DEFINE DIALOG oDLG RESOURCE "PERFILUSUARIO" TITLE if(lAppend,"Perfil de Usuario","Modificar Perfil de Usuario")
REDEFINE GET oNomb VAR cNomb ID 101 OF oDlg Valid if(empty(cNomb),(MsgStop("Debe ingresar el nombre.","Alto"),.f.),.t.)
REDEFINE GET oCodi VAR cCodi ID 102 OF oDlg Valid if(empty(cCodi),(MsgStop("Debe ingresar la clave.","Alto"),.f.),.t.)

REDEFINE BUTTONBMP ID 312 OF oDLG ACTION (lOK:=.T.,oDlg:End()) BITMAP "ACEPTAR" TEXTRIGHT
REDEFINE BUTTONBMP ID 313 OF oDLG ACTION (lOK:=.F.,oDlg:End()) CANCEL BITMAP "CANCELAR" TEXTRIGHT

ACTIVATE DIALOG oDLG CENTERED 

IF lOK
  if lAppend
     oServer:Query("INSERT INTO usuarios SET NumUser = '"+cValToChar(nNumeUser)+"' ;")
  endif 
  
  oServer:Query("UPDATE usuarios SET nombre = '"+cNomb+"', codigo = '"+Encrypt(cCodi,'AMFSOFT')+"' " +;
                                "WHERE numUser = '"+cValToChar(nNumeUser)+"' ;")

  oUsuarios:Refresh()  //actualiza consulta
  oUsuarios:Goto(nRecno)
  if lAppend
     oUsuarios:GoBottom()
  endif
ELSE
  oUsuarios:Gotop()
ENDIF
return nil
 
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
xmanuel
Posts: 613
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Contact:

Re: Almacenar contraseñas con FWH MySQL/MariaDB

Post by xmanuel »

Con HDO es muy fácil.
Ahí lo dejo!!!
Incluso podrías usas HDO RDD, mira este código:

Code: Select all

USE usuarios NEW ALIAS usuarios VIA "HDO"

// Para guardar

usuarios->(dbAppend())

usuarios->user:= "el_usuario"
usuarios->pwd := AES_ENCRYPT('la_contraseña','llave')

usuarios->(dbCommit())

// Para recuperar

if usuarios->( DBSeek( "el_usuario") )
   usuario := usuarios->user
   contraseña := AES_DECRYPT( usuarios->pwd, "llave" )
else
   alert( "Usuario no encontrado" )
endif

 
Como ves usando la HDO RDD es como si trataras una DBF normal
No me digas que no es fácil.

También puedes hacerlo con TRowset
o directamente con sentencia SQL

No es por nada pero HDO mola!!!

:D
______________________________________________________________________________
Sevilla - Andalucía
Adolfredo Martinez
Posts: 33
Joined: Fri Feb 15, 2019 1:37 pm
Location: Aracataca-Colombia

Re: Almacenar contraseñas con FWH MySQL/MariaDB solucionado

Post by Adolfredo Martinez »

Hola FranciscoA y xmanuel.

Gracias por contestar.

Francisco excelente ejemplo gracias ya lo resolví, al comienzo tuve mi tropiezo, pero cambie la estructura del campo donde almaceno el password tenia definido así:

Clave varchar(20) NULL la cambie por
CODIGO text(20) NULL


Gracias
Post Reply