2013-04-11 36 views
6
  1. Tôi có một tệp testfile và một chuỗi teststring.Nội dung giống nhau, MD5 khác nhau - Tệp và Chuỗi

  2. Trong một vỏ tôi đã viết:
    echo "a" > testfile

  3. sau đó xxd testfile
    để tôi có thể nhìn thấy các giá trị thập lục phân của filecontent tôi
    đầu ra:

    0000000: 610a    a. 
    
  4. thấy mã của tôi:

    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. nó in:

    filesize: 2 
    60b725f10c9c85c70d97880dfe8191b3 
    e29311f6f1bf1af907f9ef9f44b8328b 
    

    hai hoàn toàn khác nhau băm md5.
    tôi đã cố gắng viết buffer vào một tập tin
    và viết teststring vào một tập tin họ đều giống nhau!
    bằng cách nào?
    không phải là buffer giống với teststring?

+0

Tôi không phải là lập trình viên C/C++ nên tôi không thể cung cấp bất kỳ trợ giúp kỹ thuật quá mức nào. Định dạng tập tin trong (Unicode/ASCII, vv) là gì? Độ dài của bộ đệm (một khi đã được điền) có giống chiều dài chuỗi thử không? – series0ne

+0

có, cả hai đều có chiều dài = 2 ký tự; format = ascii – bricklore

+1

in bộ đệm/chuỗi trong hex (không phải là md5s), xem chúng có khác nhau hay không. nếu chúng giống nhau, bạn có thể cần phải sử dụng hàm md5 theo cách khác (một số triển khai yêu cầu bạn hoàn thành thao tác md5) – x4rf41

Trả lời

2

Băm chính xác là băm đầu tiên của bạn, 60b725f10c9c85c70d97880dfe8191b3.

$ echo "a" | md5 
60b725f10c9c85c70d97880dfe8191b3 

băm thứ hai của bạn sẽ xảy ra là các hash của "\ x64 \ x0a", hoặc ký tự 'd' theo sau là một dòng mới:

$ echo "d" | md5 
e29311f6f1bf1af907f9ef9f44b8328b 

Bạn có chắc chắn mã bạn đăng là gì bạn đang biên dịch/chạy? Bạn đã quên biên dịch lại chưa? Bạn đang thực hiện một nhị phân cũ?

+1

"Bạn có chắc là mã bạn đăng là thứ bạn đang biên dịch không?" -- Hầu như không. 'char md5 []' cần phải được unsigned, 'teststring' cần phải được ** không ** unsigned để thậm chí làm cho biên dịch này ở nơi đầu tiên ... – DevSolar

Các vấn đề liên quan