Ver Mensaje Individual
  #25  
Antiguo 07-10-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
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(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