为什么我的MD5 Hash在整个过程中都是静态的?

Why is my MD5 Hash static for the whole process?

我正在使用 nettle 进行 MD5 哈希处理(我也尝试过 SHA1 处理相同的问题)。每当我散列任何东西时,散列总是相同的,即使对于完全不同的长度和数据也是如此。

    if (rs.response->body != NULL && rs.response->body->len > 0) { // body is a unsigned char*, len is a size_t, I have verified both here with a printf.
        struct md5_ctx md5ctx;
        md5_init(&md5ctx);
        md5_update(&md5ctx, rs.response->body->len, rs.response->body->data);
        unsigned char md5raw[16];
        md5_digest(&md5ctx, 16, md5raw);
        char md5[33];
        md5[32] = 0;
        for (int i = 0; i < 4; i++) {
            snprintf(md5 + (i * 8), 9, "%08X", md5raw + (i * 4));
        }
        printf("%s\n", md5);
    }

我已经验证它们是不同的值,valgrind 报告没有无效 reads/writes,等等。当我重新启动该过程时,哈希值会发生变化,但在该过程中永远不会改变。

snprintf 采用 value 参数。你给它一个指针,它打印 pointer。尝试

        snprintf(md5 + (i * 8), 9, "%08X", *(int *) (md5raw + (i * 4)));