7
  1. ファイルtestfileと文字列がありますteststring

  2. 私が書いたシェルで:
    echo "a" > testfile

  3. 次に、filecontent 出力xxd testfile
    の 16 進値を確認できます。

    0000000: 610a               a.
    
  4. 私のコードを見てください:

    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. それは印刷します:

    filesize: 2  
    60b725f10c9c85c70d97880dfe8191b3  
    e29311f6f1bf1af907f9ef9f44b8328b  
    

    2 つの完全に異なるmd5 ハッシュ。をファイルに
    書き込んでみましたが、ファイル に書き込んでも同じです! どうして?と同じで はありませんか? buffer
    teststring

    bufferteststring

4

1 に答える 1

2

正しいハッシュは最初のハッシュ60b725f10c9c85c70d97880dfe8191b3.

$ echo "a" | md5
60b725f10c9c85c70d97880dfe8191b3

2 番目のハッシュは、"\x64\x0a" のハッシュ、または改行が続く文字 'd' です。

$ echo "d" | md5
e29311f6f1bf1af907f9ef9f44b8328b

投稿したコードがコンパイル/実行しているものであると確信していますか? 再コンパイルするのを忘れましたか?古いバイナリを実行していますか?

于 2013-04-11T09:22:42.523 に答える