![]() |
![]() |
![]() |
![]() |
![]() |
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. |
#7
|
||||
|
||||
Gracias por las ideas. Intentaré hacer las pruebas que me sugieres. No obstante vuelvo a señalar que la misma aplicación corriendo en dos máquinas distintas en la que tiene W7 funciona sin ningún problema, al igual que en mi equipo que tiene el mismo S.O., mientras que todos los problemas los está dando el PC con W10. Por eso, al igual que en el otro hilo que refería, me inclino a pensar que tiene algo que ver con el S.O.
No digo que no sea posible, pero no creo porque esa parte del código es lo primero que se lanza y no hay nada más funcionando cuando se pide la clave de acceso al sistema. De todas maneras indagaré, aunque también he de decir que no uso hilos en mis programas porque no acabo de entender como funcionan. Sé que en muchos casos supone un atraso, pero no soy capaz de comprenderlos. |
#8
|
||||
|
||||
Otra cosa.
Cita:
|
#9
|
||||
|
||||
¿Y por qué no presentas la excepción en lugar del mensaje personalizado?
Código:
throw Exception(e....);
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#10
|
||||
|
||||
También es verdad.
|
![]() |
|
|
![]() |
||||
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 |
![]() |
|