1

我正在尝试追踪这个开源程序 mhash 如何计算它的散列

我可以使用以下命令成功运行程序:

gcc -o 示例 example.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,它有很好的文档,但是文件太多,我不知道它从哪些方面继承了它的算法?

感谢您的时间和提前帮助

4

1 回答 1

2

你的问题对我来说似乎有点模糊......我不确定我是否完全理解它。不过,我会冒险回答自己。

如果您根本不知道处理该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);

等等 ...

如果您有任何机会想要被动地获得程序执行的某种调用图,您example可以使用分析器来做到这一点。在这个程序上使用gprof会发出类似这样的问题(这需要使用 -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]
-----------------------------------------------

向您展示哪些函数被执行以及它们是如何被调用的。

于 2014-07-04T16:08:17.157 回答