![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
HASH y Windows 10
Hace unos meses planteaba un problema que estaba teniendo con una aplicación en red: En una máquina con W7 funciona sin problema alguno pero en otra con W10 no había manera de que el código que ponía en aquel hilo funcionara; ni bine, ni mal: directamente no funcionaba.
Por probar cambié un poco el diseño de la tabla donde se guardan los usuarios y ahora hago esta verificación: Código:
try { Application->OnException = NULL; Application->CreateForm(__classid(TfLogin), &fLogin); if ((nValor = fLogin->ShowModal()) != mrOk) throw Exception("Cancelado por el usuario.\nSistema desconectado."); delete fLogin; Application->OnException = DisplayError; Query->Close(); Query->SQL->Text = "SELECT Clave, CAST(HASH('" + ClaveUser + "') AS VARCHAR(25)) FROM Claves WHERE Nombre = :Nombre"; Query->ParamByName("Nombre")->AsString = NombreUser; Query->Open(); if (Query->FieldByName("Clave")->AsString != Query->Fields->FieldByNumber(2)->AsString) throw Exception("Usuario / clave desconocidos.\nSistema desconectado."); DesconectaDb(); Query->Params->Clear(); Query->Params->Add("lc_ctype=ISO8859_1"); Query->SQLDialect = 3; } catch(Exception &Exc) { Mensaje(1, Exc.Message, "Terminar"); Application->Terminate(); return 0; } |
#2
|
||||
|
||||
¿Qué no funciona, qué mensaje o error sale, en qué línea, etc...?
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#3
|
||||
|
||||
No, no da ningún error no nada. Simplemente al llegar al condicional SIEMPRE se sale por el throw. Y he comprbado que lo que está guardado en la base de datos (Clave) y lo que se calcula a partir de CAST(HASH('" + ClaveUser + "') AS VARCHAR(25)) (ClaveUser es una variable del programa y está bien asignada) tienen el mismo valor si lo ejecuto en IBManager, por ejemplo.
|
#4
|
||||
|
||||
Si se sale por throw tienes un error. Cual es...
__________________
El malabarista. |
#5
|
||||
|
||||
Si te fijas el throw está puesto para cuando el HASH de la clave que pone el usuario y el valor que está grabado no coinciden; fuerzo el error, lo que significa que a pesar de lo que está grabado no coinciden los valores.
|
#6
|
||||
|
||||
Algunas ideas:
1- Instala windows 10 en una VM y prueba. 2- Captura los sql que recibe firebird: https://stackoverflow.com/questions/...rd-sql-queries es probable que tengas 2 hilos/procesos que estan variando por problemas de timing y creas que el codigo esta haciendo paso 1 -> paso2 y resulta que es paso2 -> paso1 Ah, se me olvido el paso mas util: 3- Saca ese codigo del programa y lo pones en una app minima (como de consola), Si el error no se reproduce, sabes con certeza que el problema NO esta ahi, o tienes un bug parecido al que te puse arriba del orden. Si el error SI se reproduce, tienes un codigo mucho mas minimo que mirar. Usando logs/traces puedes ver con claridad que pasa.
__________________
El malabarista. Última edición por mamcx fecha: 27-09-2019 a las 21:14:35. |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
calcular hash | (MAJ) | Trucos | 6 | 26-02-2023 01:28:45 |
codigo hash | maco2007 | Varios | 4 | 20-10-2007 17:01:04 |
Calcular hash md5 | Lepe | Trucos | 1 | 10-05-2007 15:11:58 |
Hash | RaulChemical | Varios | 1 | 07-09-2004 20:10:11 |
¿Hash or not Hash? | hgiacobone | Varios | 5 | 17-07-2003 19:43:26 |
![]() |
|