我试图追踪这个开源程序,mhash计算它的散列
我可以使用以下命令成功运行程序:
gcc-o示例.c-lmhash
(另外,mhash目前已经安装,我正在运行Ubuntu Linux)
Mhash可以在这里找到:http://mhash.sourceforge.net/
我试过的例子是:

#include <mhash.h>
#include <stdio.h>

int main()
{
    char password[] = "Jefe";
    int keylen = 4;
    char data[] = "what do ya want for nothing?";
    int datalen = 28;
    MHASH td;
    unsigned char *mac;
    int j;

    td = mhash_hmac_init(MHASH_MD5, password, keylen,
                            mhash_get_hash_pblock(MHASH_MD5));
    mhash(td, data, datalen);
    mac = mhash_hmac_end(td);
    /*
     * The output should be 0x750c783e6ab0b503eaa86e310a5db738
     * according to RFC 2104.
     */
    printf("0x");
    for (j = 0; j < mhash_get_block_size(MHASH_MD5); j++) {
        printf("%.2x", mac[j]);
    }
    printf("\n");

    exit(0);
}

我读过API,它有很好的文档,但是有很多文件,我不知道它从哪些方面继承了它的算法?
谢谢你的时间和帮助

最佳答案

你的问题在我看来有点含糊。。。我不确定我是否完全理解。不过,我还是要冒险寻找答案。
如果您只是不知道执行什么来处理MD5散列,那么最简单的方法可能是在这个示例程序上附加一个调试器。确保在mhash库上启用了调试标志(默认情况下似乎是启用的),然后进入mhash并查看这会给您带来什么好处。你不能错过这样的机会。
在gdb中,它看起来像这样(您可能希望使用IDE-eclipse,使它更漂亮):

$ gdb ./test.exe
..
Reading symbols from /home/B41655/workspace/ctest/test.exe...done.
(gdb) break main
Breakpoint 1 at 0x4011af: file test.c, line 5.
(gdb) run
Starting program: /home/B41655/workspace/ctest/test.exe
[New Thread 10200.0x205c]
[New Thread 10200.0x27b0]

Breakpoint 1, main () at test.c:5
5               char password[] = "Jefe";
(gdb) s
6               int keylen = 4;
(gdb) s
7               char data[] = "what do ya want for nothing?";
(gdb) s
8               int datalen = 28;
(gdb) s
13              td = mhash_hmac_init(MHASH_MD5, password, keylen,
(gdb) s
mhash_get_hash_pblock (type=MHASH_MD5) at mhash.c:438
438     {
(gdb) s
441             MHASH_ALG_LOOP(ret = p->hash_pblock);

等等。。。
如果你想被动地获得程序执行的调用图,你可以用profiler来实现。在这个程序上使用example会出现类似的问题(这需要用-pg标志重新编译库/程序):
index % time    self  children    called     name
                0.00    0.00      17/17          main [81]
 [2]     0.0    0.00    0.00      17         mhash_get_block_size [2]
-----------------------------------------------
                0.00    0.00       1/9           mhash [14]
                0.00    0.00       2/9           mhash_hmac_deinit [17]
                0.00    0.00       2/9           mhash_hmac_init [20]
                0.00    0.00       2/9           MD5Update [9]
                0.00    0.00       2/9           MD5Final [10]
[3]      0.0    0.00    0.00       9         mutils_memcpy [3]
-----------------------------------------------
                0.00    0.00       1/6           mhash_deinit [15]
                0.00    0.00       1/6           mhash_hmac_init [20]
                0.00    0.00       2/6           mhash_hmac_deinit [17]
                0.00    0.00       2/6           MD5Final [10]
[4]      0.0    0.00    0.00       6         mutils_bzero [4]
-----------------------------------------------
                0.00    0.00       1/6           mhash_hmac_end_m [19]
                0.00    0.00       1/6           mhash_hmac_init [20]
                0.00    0.00       4/6           mhash_init_int [12]
[5]      0.0    0.00    0.00       6         mutils_malloc [5]
-----------------------------------------------
                0.00    0.00       2/6           MD5Update [9]
                0.00    0.00       4/6           MD5Final [10]
[6]      0.0    0.00    0.00       6         mutils_word32nswap [6]
-----------------------------------------------
                0.00    0.00       1/5           mhash_deinit [15]
                0.00    0.00       4/5           mhash_hmac_deinit [17]
[7]      0.0    0.00    0.00       5         mutils_free [7]
-----------------------------------------------
                0.00    0.00       2/4           MD5Update [9]
                0.00    0.00       2/4           MD5Final [10]
[8]      0.0    0.00    0.00       4         MD5Transform [8]
-----------------------------------------------
                0.00    0.00       1/4           mhash [14]
                0.00    0.00       1/4           mhash_hmac_init [20]
                0.00    0.00       2/4           mhash_hmac_deinit [17]
[9]      0.0    0.00    0.00       4         MD5Update [9]
                0.00    0.00       2/9           mutils_memcpy [3]
                0.00    0.00       2/6           mutils_word32nswap [6]
                0.00    0.00       2/4           MD5Transform [8]
-----------------------------------------------
                0.00    0.00       1/2           mhash_deinit [15]
                0.00    0.00       1/2           mhash_hmac_deinit [17]
[10]     0.0    0.00    0.00       2         MD5Final [10]
                0.00    0.00       4/6           mutils_word32nswap [6]
                0.00    0.00       2/4           MD5Transform [8]
                0.00    0.00       2/9           mutils_memcpy [3]
                0.00    0.00       2/6           mutils_bzero [4]
-----------------------------------------------
                0.00    0.00       2/2           mhash_init_int [12]
[11]     0.0    0.00    0.00       2         MD5Init [11]
-----------------------------------------------
                0.00    0.00       1/2           mhash_hmac_deinit [17]
                0.00    0.00       1/2           mhash_hmac_init [20]
[12]     0.0    0.00    0.00       2         mhash_init_int [12]
                0.00    0.00       4/6           mutils_malloc [5]
                0.00    0.00       2/2           mutils_memset [13]
                0.00    0.00       2/2           MD5Init [11]
-----------------------------------------------
                0.00    0.00       2/2           mhash_init_int [12]
[13]     0.0    0.00    0.00       2         mutils_memset [13]
-----------------------------------------------
                0.00    0.00       1/1           main [81]
[14]     0.0    0.00    0.00       1         mhash [14]
                0.00    0.00       1/9           mutils_memcpy [3]
                0.00    0.00       1/4           MD5Update [9]
-----------------------------------------------
                0.00    0.00       1/1           mhash_hmac_deinit [17]
[15]     0.0    0.00    0.00       1         mhash_deinit [15]
                0.00    0.00       1/6           mutils_bzero [4]
                0.00    0.00       1/2           MD5Final [10]
                0.00    0.00       1/5           mutils_free [7]
-----------------------------------------------
                0.00    0.00       1/1           main [81]
[16]     0.0    0.00    0.00       1         mhash_get_hash_pblock [16]
-----------------------------------------------
                0.00    0.00       1/1           mhash_hmac_end_m [19]
[17]     0.0    0.00    0.00       1         mhash_hmac_deinit [17]
                0.00    0.00       4/5           mutils_free [7]
                0.00    0.00       2/9           mutils_memcpy [3]
                0.00    0.00       2/4           MD5Update [9]
                0.00    0.00       2/6           mutils_bzero [4]
                0.00    0.00       1/2           mhash_init_int [12]
                0.00    0.00       1/2           MD5Final [10]
                0.00    0.00       1/1           mhash_deinit [15]
-----------------------------------------------
                0.00    0.00       1/1           main [81]
[18]     0.0    0.00    0.00       1         mhash_hmac_end [18]
                0.00    0.00       1/1           mhash_hmac_end_m [19]
-----------------------------------------------
                0.00    0.00       1/1           mhash_hmac_end [18]
[19]     0.0    0.00    0.00       1         mhash_hmac_end_m [19]
                0.00    0.00       1/6           mutils_malloc [5]
                0.00    0.00       1/1           mhash_hmac_deinit [17]
-----------------------------------------------
                0.00    0.00       1/1           main [81]
[20]     0.0    0.00    0.00       1         mhash_hmac_init [20]
                0.00    0.00       2/9           mutils_memcpy [3]
                0.00    0.00       1/2           mhash_init_int [12]
                0.00    0.00       1/6           mutils_malloc [5]
                0.00    0.00       1/6           mutils_bzero [4]
                0.00    0.00       1/4           MD5Update [9]
-----------------------------------------------

显示执行了哪些函数以及如何调用它们。

09-27 06:45