 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Jue 14 Jun, 2012 10:18 am Asunto: Datos encriptados en MySQL |
|
|
Estoy empezando a trabajar con este motor. Tengo una tabla en la que los datos personales, por seguridad, están encriptados con AES_ENCRYPT y tengo este query:
| Código: | SELECT num_socio, AES_DECRYPT(apellidos, @clavencrypt) ApeSoc, AES_DECRYPT(nombre, @clavencrypt) NomSoc, login_socio FROM inscripciones |
Se ejecuta sin problema y la consulta genera un resultado, pero todas las columnas encriptadas vienen vacías y todas tiene datos seguro.
Me explico mejor. Si yo ejecuto el query directamente en el shell de MySQL me devuelve, por ejemplo, esto:
| Cita: | +----------------+--------+--------------+
| ApeSoc | NomSoc | login_socio |
+----------------+--------+--------------+
| MATILLA CAND┴S | ┴NGEL | angelmatilla |
+----------------+--------+--------------+ |
Como quiero cargar un TListView con los datos recuperados ejecuto eso:
| Código: | for (; !Query->Eof; Query->Next())
{
pItem = Lista->Items->Add();
pItem->Caption = Query->FieldByName("login_socio")->AsString;
pItem->SubItems->Add(Trim(Query->FieldByName("ApeSoc")->AsString) + ", " + Query->FieldByName("NomSoc")->AsString);
pItem->SubItems->Add(Query->FieldByName("num_socio")->AsInteger);
} |
y el resultado que obtengo es, por ejemplo, este:
En la columna identidad debería aparecer MATILLA CANDÁS, ÁNGEL. La consulta la ejecuto con un TADOQuery y la base de datos esá conectada con un TADOConnection. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
juanma Cmdr

Registrado: 17 Nov 2005Mensajes: 127Ubicación: Almeria - España
|
Publicado: Jue 14 Jun, 2012 2:14 pm Asunto: |
|
|
Hola Angel, el problema que me parece ver por lo que describes, es que los datos no los tienes guardados en la ddbb encriptados, de forma que al intentar desencriptarlos no obtienes ningun valor válido.
En el insert/updates tendrias que haber utilizado AES_ENCRYPT ... |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Jue 14 Jun, 2012 4:05 pm Asunto: |
|
|
Gracias por la respuesta juanma. Los datos en la base de datos original sí están encriptados; de hecho, ejecutando el mismo query del ejemplo en el sehll de MySQL sale lo que puse en el comentario; si ejecuto el query sin el decrypt sale esto:
| Cita: | | Código: | SELECT num_socio, apellidos, nombre, login_socio FROM inscripciones WHERE num_socio = 377; |
+-----------+------------------+------------------+--------------+
| num_socio | apellidos | nombre | login_socio |
+-----------+------------------+------------------+--------------+
| 377 | 6[Õ¨^S┐Q▀@ "rÖi | E║■♂Á☼Uµ├bØ►(Õ^k | angelmatilla |
+-----------+------------------+------------------+--------------+ |
Y el mismo query con el decrypt:
| Cita: | | Código: | SELECT num_socio, AES_DECRYPT(apellidos, @clave), AES_DECRYPT(nombre, @clave), login_socio FROM inscripciones WHERE num_socio = 377; |
+-----------+----------------+--------+--------------+
| num_socio | Apellidos | Nombre | login_socio |
+-----------+----------------+--------+--------------+
| 377 | MATILLA CAND┴S | ┴NGEL | angelmatilla |
+-----------+----------------+--------+--------------+ |
Por lo tanto, datos sí hay.
No sé si tenga algo que ver con como conecto la base de datos. Estoy usando este código:
| Código: | void __fastcall TfSocios::FormCreate(TObject *Sender)
{
dAsociacion->Close();
dAsociacion->ConnectionString = "Provider = MSDASQL.1;"
"Persist Security Info = False;"
"Data Source = Asociacion;" //Nombre del origen de datos -- igual al nombre del DSN
"Extended Properties = DATABASE = Asociacion;"
"OPTION = 0;"
"PORT = 3306;" //Puerto
"SERVER = localhost;"
"UID = root;" // Nombre de usuario
"PASSWORD = toledo"; // Password
try
{
dAsociacion->Open();
}
catch(...)
{
}
}
//--------------------------------------------------------------------------- |
dAsociacion es un TADOConnection.
2. En la consulta.
| Código: | Query->Close();
Query->SQL->Text = "SELECT num_socio, AES_DECRYPT(apellidos, @clavencrypt) ApeSoc, AES_DECRYPT(nombre, @clavencrypt) NomSoc, login_socio FROM inscripciones WHERE activado = 'A';
Query->Open(); |
Query es un TADOQuery.
Ya os digo que es la primera vez que me enfrento a MySQL y estoy empezando a conocerlo; por ejemplo: La estructura del comando AES_DECRYPT, ¿es correcta esa manera de pasar la clave al servidor?
En Club Delphi he visto un enlace a un código para implementar las funciones de encriptación AES directamente en Cifrar texto con AES-256; parecen muy interesantes y no me importaría usarlas pero el problema que tengo es que desde el formulario C++ aunque haga la SELECT sin la función AES_DECRYPT no devuelve datos. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
juanma Cmdr

Registrado: 17 Nov 2005Mensajes: 127Ubicación: Almeria - España
|
Publicado: Jue 14 Jun, 2012 4:37 pm Asunto: |
|
|
Ya veo ...
Has probado a introducir la clave directametne en la funcion
| Código: | Query->SQL->Add("SELECT num_socio, AES_DECRYPT(apellidos, 'tuclave') ApeSoc, AES_DECRYPT(nombre, 'tuclave') NomSoc, login_socio FROM inscripciones"); |
Me da la impresion que @clavencrypt lo interpreta bien el shell de mysql pero con los componentes del cbuilder me suena que llevan 2 puntos (:clavencrypt) y asociarles el valor en parameter |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Vie 15 Jun, 2012 4:09 pm Asunto: |
|
|
| juanma escribió: | | Me da la impresion que @clavencrypt lo interpreta bien el shell de mysql pero con los componentes del cbuilder me suena que llevan 2 puntos (:clavencrypt) y asociarles el valor en parameter |
Tenías razón. Me fie del manual de MySQl que comenta que por seguridad la clave se pase con @clave.
Pero se me plantea otro problema, este un poco más genérico. Al cambiar los @clave por :clave el query queda así:
| Código: | Query->Close();
Query->SQL->Text = "SELECT num_socio, AES_DECRYPT(apellidos, :clave) ApeSoc, AES_DECRYPT(nombre, :clave) NomSoc, login_socio FROM inscripciones ORDER BY ApeSoc, NomSoc, num_socio";
Query->Parameters->ParamByName("clave")->Value = clavencrypt;
Query->Open(); |
Ese ParamByName, ¿no debería reemplazar todos los :clave por su valor? Lo digo porque puesto tal cual sólo me sustituye el primero que encuentra. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|