![]() |
![]() |
| Paypal | 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. |
![]() |
|
|
Temas Similares
|
||||
| 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 |
|