Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-10-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.211
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Aprovecho para mostrarte como obtener el Hash MD5 de un archivo con la API de Windows tal y como lo utilicé en este ejemplo para cazar un virus: TerminateMD5_Process, a la caza de un virus...

Código PHP:
//---------------------------------------------------------------------------
#define MD5LEN  16
#define BUFSIZE 1024
typedef CHAR TMD5[33];


void GetMD5FromFile(CHARFileNameCHAR *MD5)
{
  
HANDLE hFile 0;
  
HCRYPTPROV hProv 0;
  
HCRYPTHASH hHash 0;
  
BYTE Hash[MD5LEN];
  
DWORD bHash 0;
  
DWORD bRead 0;
  
BYTEBuffer = (BYTE*)VirtualAlloc(0BUFSIZEMEM_COMMITPAGE_READWRITE);
  
hFile CreateFile(FileNameGENERIC_READFILE_SHARE_READNULLOPEN_EXISTINGFILE_FLAG_SEQUENTIAL_SCAN

NULL);
  if(
hFile != INVALID_HANDLE_VALUE){
    if(
CryptAcquireContext(&hProvNULLNULLPROV_RSA_FULLCRYPT_VERIFYCONTEXT)){
      if(
CryptCreateHash(hProvCALG_MD500, &hHash)){
        while (
1) {
          
ReadFile(hFileBufferBUFSIZE, &bReadNULL);
          if(!
bRead) break;
          
CryptHashData(hHashBufferbRead0);
        }
        
bHash MD5LEN;
        if(
CryptGetHashParam(hHashHP_HASHVALHash, &bHash0)){
          for(
int i=0i<2*MD5LENi++){
            
MD5[i] = (0x0F Hash[i/2] >> 4*((i+1)%2)) + 48;
            if(
MD5[i] > '9'MD5[i] += 7;
          }
          
MD5[32] = 0;
        }
      }
      
CryptDestroyHash(hHash);
    }
    
CryptReleaseContext(hProv0);
  }
  
CloseHandle(hFile);
  
VirtualFree(Buffer0MEM_RELEASE);

Saludos.
Responder Con Cita
  #2  
Antiguo 07-10-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.211
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Un detalle más que olvidé al publicar la solución a tu problema es que ha añadido un guión bajo al nombre del archivo recibido puesto que se escribe en el mismo path que el original y puede ocurrir una doble apertura del mismo:
Código PHP:
NewPath ExtractFilePath(Application->ExeName) +"_"archivo.name

Saludos.
Responder Con Cita
  #3  
Antiguo 07-10-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
estos dias no voy a poder tocar el pc porque voy a estar fuera y la verdad es que no veo el cambio que realizaste en el codigo a simple vista. ¿Podrias explicar que cambiaste y cual era el problema? Sobre lo del md5... Sabia que python lo ponia muy facil pero no sabia que la api de windows ya lo tenia y la verdad es que es de gran utilidad. Muchisimas gracias por todo.
Responder Con Cita
  #4  
Antiguo 08-10-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.211
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Puse delante de todo, el código que lee el fichero, antes de las lecturas del flag y cabeceras. Viendo que esas variables eran globales, me salté su lectura, puesto que en el anterior evento ya se han leído.

El oroblema es que si lees del socket datos, cuando esperas un fichero, no se vuelven a leer después y pierdes esa información, que es del propio fichero.

Debes organizar un poco codo el código.


Saludos.
Responder Con Cita
  #5  
Antiguo 08-10-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
ok amigo, mil gracias, ya contaré que tal va pero se me olvidó comentar algo y es que la funcion que pusiste para leer la llegada del fichero habia muy rara vez que salia antes de leer todo el fichero porque recibia un -1 antes de tiempo. Pude comprobar que si al final del bucle ponia un Sleep(1) ya no fallaba nunca. Ya digo que sin el Sleep fallaba muy rara vez, quizas una de 10 o mas veces. ¿por que podia pasar eso? la funcion transmitfile ya habia salido con true con lo que se supone que la cola de la que estamos descargando tiene ya todos los datos necesarios ¿no?

Otra cosa ¿Algun voluntario para probar si funciona online? es que solo lo he probado en mi pc y me gustaria ver como se hace para que funcione en online. ¿que pongo en TServerSocket->Host? ¿y que pongo en el cliente? ¿que diferencia hay entre Host, Address, y Service? Creo que en los tres puedo poner la direccion y funcionaria igual ¿no?

Última edición por aguml fecha: 08-10-2014 a las 13:23:41.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ellas y Ellos jcarteagaf Humor 1 06-08-2011 03:43:05
Llamada entre ventana usando paquetes. PittyDelphi OOP 3 27-01-2011 12:28:37
¿Saben algo de ellos? roman La Taberna 11 18-11-2008 18:59:07
Comunicación TCP/IP entre dos programas usando componentes INDY Roger_Delphi Internet 2 20-10-2008 14:02:49
Comunicacion entre procesos walito Varios 0 14-11-2007 21:55:53


La franja horaria es GMT +2. Ahora son las 17:07:13.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi