2013-04-11 16 views
6
  1. testfile bir dosya ve teststring dizgisi var. bir kabuk içindeAynı içerik, farklı MD5 - Dosya ve Dize

  2. yazdım: o zaman
    echo "a" > testfile

  3. xxd testfile
    yüzden
    çıktı benim fileContent onaltılık değerlerini görebilirsiniz:

    0000000: 610a    a. 
    
  4. kodumu bkz:

    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. o yazdırır:

    filesize: 2 
    60b725f10c9c85c70d97880dfe8191b3 
    e29311f6f1bf1af907f9ef9f44b8328b 
    

    iki tamamen farklı md5 karmaları.
    onlar aynı olan bir dosyaya
    içine buffer yazma ve bir dosya içine teststring yazma çalıştı!
    neden?
    bufferteststring ile aynı değil mi?

+0

C/C++ programcısı değilim, bu yüzden fazla teknik yardım sağlayamıyorum. Dosya hangi formatta (Unicode/ASCII vb)? Tamponun uzunluğu (bir kez doldurulan) teststring uzunluğu ile aynı mı? – series0ne

+0

evet, her ikisi de uzunluk = 2 karaktere sahiptir; format = ascii – bricklore

+1

arabelleği/dizeyi onaltılık olarak yazdırır (md5 değil), farklılık gösterip göstermediğine bakın. Eğer aynı ise, muhtemelen md5 işlevini farklı bir şekilde kullanmanız gerekir (bazı uygulamalar md5 işlemini bitirmenizi gerektirir) – x4rf41

cevap

2

Doğru hash, ilk karma, 60b725f10c9c85c70d97880dfe8191b3.

$ echo "d" | md5 
e29311f6f1bf1af907f9ef9f44b8328b 

size yayınlanmıştır kodu ne olduğundan emin misiniz:

$ echo "a" | md5 
60b725f10c9c85c70d97880dfe8191b3 

Kişisel ikinci karma "\ x64 \ x0a" karmasını veya karakteri sonrasında bir yeni satır 'd' olur derleme/koşuyor musun? Yeniden derlemeyi unuttun mu? Eski bir ikiliyi mi yürütüyorsun?

+1

"Gönderdiğiniz kodun neyi derlediğinizden emin misiniz?" - Büyük olasılıkla değil. char md5 [] 'imzasız olması gerekir, 'teststring' ** bu derleme ilk etapta bile imzasız olmalı ** – DevSolar

İlgili konular