测试文件 然后 xxd 测试文件 所以我可以看到我的文件内容的十六进制值 输出: -6ren">
gpt4 book ai didi

c++ - 相同的内容,不同的 MD5 - 文件和字符串

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:43:52 27 4
gpt4 key购买 nike

  1. 我有一个文件 testfile 和一个字符串 teststring

  2. 我在 shell 中写道:
    echo "a"> 测试文件

  3. 然后 xxd 测试文件
    所以我可以看到我的文件内容的十六进制值
    输出:

    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

    两个完全不同的md5哈希值。
    我尝试将 buffer 写入文件
    并将 teststring 写入文件 它们是相同的!
    为什么?
    bufferteststring 不一样吗?

最佳答案

正确的散列是您的第一个散列,60b725f10c9c85c70d97880dfe8191b3

$ echo "a" | md5
60b725f10c9c85c70d97880dfe8191b3

您的第二个散列恰好是“\x64\x0a”的散列,或者字符“d”后跟一个换行符:

$ echo "d" | md5
e29311f6f1bf1af907f9ef9f44b8328b

您确定您发布的代码是您正在编译/运行的代码吗?你忘记重新编译了吗?你在执行旧的二进制文件吗?

关于c++ - 相同的内容,不同的 MD5 - 文件和字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15944327/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com