Ver Mensaje Individual
  #10  
Antiguo 07-10-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.211
Reputación: 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(CHAR* FileName, CHAR *MD5)
{
  
HANDLE hFile = 0;
  
HCRYPTPROV hProv = 0;
  
HCRYPTHASH hHash = 0;
  
BYTE Hash[MD5LEN];
  
DWORD bHash = 0;
  
DWORD bRead = 0;
  
BYTE* Buffer = (BYTE*)VirtualAlloc(0, BUFSIZE, MEM_COMMIT, PAGE_READWRITE);
  
hFile = CreateFile(FileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, 

NULL);
  if(
hFile != INVALID_HANDLE_VALUE){
    if(
CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)){
      if(
CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash)){
        while (
1) {
          
ReadFile(hFile, Buffer, BUFSIZE, &bRead, NULL);
          if(!
bRead) break;
          
CryptHashData(hHash, Buffer, bRead, 0);
        }
        
bHash = MD5LEN;
        if(
CryptGetHashParam(hHash, HP_HASHVAL, Hash, &bHash, 0)){
          for(
int i=0; i<2*MD5LEN; i++){
            
MD5[i] = (0x0F & Hash[i/2] >> 4*((i+1)%2)) + 48;
            if(
MD5[i] > '9') MD5[i] += 7;
          }
          
MD5[32] = 0;
        }
      }
      
CryptDestroyHash(hHash);
    }
    
CryptReleaseContext(hProv, 0);
  }
  
CloseHandle(hFile);
  
VirtualFree(Buffer, 0, MEM_RELEASE);
} 
Saludos.
Responder Con Cita