【问题标题】:Tracing Mhash Files (Hashing)跟踪 Mhash 文件(散列)
【发布时间】:2014-08-25 20:59:15
【问题描述】:

我正在尝试追踪这个开源程序 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,它有很好的文档,但是文件太多,我不知道它从哪些方面继承了它的算法?

提前感谢您的时间和帮助

【问题讨论】:

    标签: c hash md5 trace mhash


    【解决方案1】:

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

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

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

    【讨论】:

    • 哇,这是非常好的信息,谢谢。我的问题有点含糊,我只是想弄清楚它实际上是如何编译程序的,因为它有太多的.h。我也是 C 编程的新手,我只是使用 gcc 进行编译。我认为 Eclipse 是高级语言的 IDE?
    • Eclipse 是一个基于插件的框架。现在几乎所有语言/开发技术都有一个 eclipse 插件。查看 C 开发套件:eclipse.org/cdt
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 2018-12-18
    • 2020-03-21
    • 2012-12-29
    相关资源
    最近更新 更多