2013-04-11 4 views
6
  1. Ho un file testfile e una stringa teststring.Stessi contenuti, diversi MD5 - File e stringa

  2. In un guscio ho scritto:
    echo "a" > testfile

  3. poi xxd testfile
    così posso vedere i valori esadecimali della mia fileContent
    uscita:

    0000000: 610a    a. 
    
  4. vedere il mio codice:

    int file; 
    struct stat s; 
    unsigned long size; 
    char* buffer; 
    char md5[MD5_DIGEST_LENGTH] 
    
    file = open("testfile", O_RDONLY); 
    if (file < 0) 
        return false; 
    
    if (fstat(file, &s) < 0) 
    { 
        close(file); 
        return false; 
    } 
    
    size = s.st_size;      //GET FILE SIZE 
    printf("filesize: %lu\n", size);  //PRINT FILESIZE FOR DEBUGGING 
    buffer = (char*)mmap(0, size, PROT_READ, MAP_SHARED, file, 0); //MAP FILE CONTENT TO BUFFER 
    MD5((unsigned char*)buffer, size, md5); //GENERATE MD5 
    munmap(buffer, size);     //UNMAP BUFFER 
    close(file); 
    
    for (int i = 0; i < MD5_DIGEST_LENGTH; i++) 
        printf("%02x", md5[i]); 
    printf("\n"); 
    
    
    unsigned char* teststring = "\x61\x0a"; //SAME STRING AS IN THE FILE 
    
    MD5((unsigned char*)teststring, 2, md5); 
    for (int i = 0; i < MD5_DIGEST_LENGTH; i++) 
        printf("%02x", md5[i]); 
    printf("\n"); 
    
  5. esso stampa:

    filesize: 2 
    60b725f10c9c85c70d97880dfe8191b3 
    e29311f6f1bf1af907f9ef9f44b8328b 
    

    due completamente diverse hash MD5.
    Ho provato a scrivere il buffer in un file
    e scrivere il teststring in un file sono la stessa!
    dal perché?
    non è lo buffer uguale al teststring?

+0

Non sono un programmatore C/C++ quindi non posso fornire alcun aiuto troppo tecnico. In che formato è il file (Unicode/ASCII ecc.)? La lunghezza del buffer (una volta popolata) è uguale alla lunghezza del teststring? – series0ne

+0

sì, entrambi hanno lunghezza = 2 caratteri; format = ascii – bricklore

+1

stampa il buffer/stringa in esadecimale (non gli md5), vedi se sono diversi. se sono uguali, probabilmente è necessario utilizzare la funzione md5 in un modo diverso (alcune implementazioni richiedono di completare l'operazione md5) – x4rf41

risposta

2

L'hash corretto è il primo hash, 60b725f10c9c85c70d97880dfe8191b3.

$ echo "a" | md5 
60b725f10c9c85c70d97880dfe8191b3 

Il tuo secondo hash sembra essere l'hash di "\ x64 \ x0a", o il carattere 'd' seguito da un ritorno a capo:

$ echo "d" | md5 
e29311f6f1bf1af907f9ef9f44b8328b 

Sei sicuro il codice che avete inviato è quello che stai compilando/correndo? Hai dimenticato di ricompilare? Stai eseguendo un vecchio binario?

+1

"Sei sicuro che il codice che hai postato sia quello che stai compilando?" - Molto probabilmente no. 'char md5 []' deve essere unsigned, 'teststring' deve essere ** not ** unsigned per renderlo compilabile in primo luogo ... – DevSolar