Трассировка Mhash-файлов (хеширование)

Я пытаюсь проследить, как эта программа с открытым исходным кодом, 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, у него очень хорошая документация, но там очень много файлов, я не знаю, из каких областей он наследует свои алгоритмы?

Спасибо за ваше время и помощь заранее

1 ответ

Ваш вопрос мне кажется немного расплывчатым... Я не уверен, что полностью его понимаю. Я приду в себя ответ, хотя.

Если вы просто не знаете, что исполняется за это 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]
-----------------------------------------------

показывая, какие функции были выполнены и как они были вызваны.

Другие вопросы по тегам