跟踪Mhash文件(哈希)

时间:2014-07-04 13:40:24

标签: c hash md5 trace mhash

我试图追踪这个开源程序,mhash如何计算它的散列

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

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

感谢您的时间和提前帮助

1 个答案:

答案 0 :(得分:2)

你的问题对我来说似乎有些模糊......我不确定我是否完全理解它。我会冒险尝试自己的答案。

如果你只是不知道为了处理MD5散列而执行的是什么,最容易进入它的方法可能是在你的这个示例程序上附加一个调试器。确保在mhash库上启用了调试标记(默认情况下似乎已启用),然后单步执行mhash并查看它的位置。你不能错过任何这样的方式。

在gdb中它看起来像这样(你可能想要使用IDE - 也许是日食,让它变得更漂亮):

$ 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]
-----------------------------------------------

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