Page 1 of 1
Almacenar contraseñas con FWH MySQL/MariaDB
Posted: Mon Apr 13, 2020 12:49 am
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
Re: Almacenar contraseñas con FWH MySQL/MariaDB
Posted: Mon Apr 13, 2020 9:12 pm
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
Re: Almacenar contraseñas con FWH MySQL/MariaDB
Posted: Tue Apr 14, 2020 4:02 pm
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.
Re: Almacenar contraseñas con FWH MySQL/MariaDB
Posted: Tue Apr 14, 2020 4:05 pm
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!!!
Re: Almacenar contraseñas con FWH MySQL/MariaDB solucionado
Posted: Wed Apr 15, 2020 10:52 am
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