Almacenar contraseñas con FWH MySQL/MariaDB

Almacenar contraseñas con FWH MySQL/MariaDB

Postby Adolfredo Martinez » Mon Apr 13, 2020 12:49 am

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: 95
Joined: Fri Feb 15, 2019 1:37 pm
Location: Aracataca-Colombia

Re: Almacenar contraseñas con FWH MySQL/MariaDB

Postby Adolfredo Martinez » Mon Apr 13, 2020 9:12 pm

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
Adolfredo Martinez
 
Posts: 95
Joined: Fri Feb 15, 2019 1:37 pm
Location: Aracataca-Colombia

Re: Almacenar contraseñas con FWH MySQL/MariaDB

Postby FranciscoA » Tue Apr 14, 2020 4:02 pm

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  Expand view
//-------------------------------------//
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.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Almacenar contraseñas con FWH MySQL/MariaDB

Postby xmanuel » Tue Apr 14, 2020 4:05 pm

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

Code: Select all  Expand view

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
xmanuel
 
Posts: 756
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

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

Postby Adolfredo Martinez » Wed Apr 15, 2020 10:52 am

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
Adolfredo Martinez
 
Posts: 95
Joined: Fri Feb 15, 2019 1:37 pm
Location: Aracataca-Colombia


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 88 guests