Пытаясь понять алгоритм MD5 - PullRequest
1 голос
/ 12 апреля 2009

Я пытаюсь сделать что-то в C с MD5 (и последний пытается сделать что-то с алгоритмом SHA1). Моя главная проблема заключается в том, что я никогда не делал ничего сложного в C, кроме простых вещей (ничего подобного указателям на указатели или структуры).

Я получил алгоритм md5 здесь.

Я включил файлы md5.c и md5.h в свой проект C (используя кодовые блоки), но единственная проблема заключается в том, что я не совсем понимаю, как его использовать. Я прочитал и перечитал код, и я не понимаю, как использовать эти функции, чтобы превратить «пример» в хеш MD5.

Я давно не занимался программированием на C (в основном php), поэтому я немного растерялся. По сути, я прошу несколько примеров использования. Они предоставляются через файл md5main.c, но я их не понимаю.

Я стремлюсь высоко здесь? Должен ли я прекратить все это и снова начать читать книгу на С или кто-нибудь может дать мне несколько советов и посмотреть, смогу ли я это выяснить.

Спасибо.

Ответы [ 3 ]

5 голосов
/ 12 апреля 2009

Хотя я согласен с Биллом, вам следует вернуться к книге C, если вы действительно хотите понять, что вы делаете. Но, чтобы помочь, я изменил и прокомментировал часть кода из md5main.c ...

const char* testData = "12345";  // this is the data you want to hash
md5_state_t state;  // this is a state object used by the MD5 lib to do "stuff"
                    // just treat it as a black box
md5_byte_t digest[16];  // this is where the MD5 hash will go

// initialize the state structure
md5_init(&state);

// add data to the hasher
md5_append(&state, (const md5_byte_t *)testData, strlen(testData));

// now compute the hash
md5_finish(&state, digest);

// digest will now contain a MD5 hash of the testData input

Надеюсь, это поможет!

5 голосов
/ 12 апреля 2009

Вы должны прекратить все это и снова начать читать книгу С.

По моему опыту, когда я пытаюсь выучить новый язык программирования, нецелесообразно пытаться реализовать сложный проект одновременно. Вы должны выполнять простые упражнения на C, пока не освоитесь с языком, а затем заняться чем-то вроде реализации MD5 или интеграции существующей реализации.

Кстати, чтение кода - это навык, отличный от написания кода. Между этими двумя навыками есть различия, но оба требуют, чтобы вы хорошо понимали язык.

2 голосов
/ 12 апреля 2009

Я думаю, что вы выбрали самое худшее, на что можно смотреть (не по вашей вине). Алгоритмы шифрования и хэш-типа позволят использовать язык самым странным образом для выполнения математических операций, которые они должны выполнять быстро. Они почти гарантированно будут запутаны и трудны для понимания. Кроме того, вам нужно увязнуть в математике, чтобы по-настоящему понять их.

Если вам просто нужен алгоритм хеширования, получите хорошо известную реализацию и используйте его как черный ящик. Не пытайтесь реализовать это самостоятельно, вы почти наверняка внесете некоторую криптографическую слабость в реализацию.

Изменить: Чтобы быть полностью отзывчивым, если вы хотите хорошие книги (или ресурсы) по шифрованию, посмотрите на Брюса Шнайера. Прикладная криптография - это классика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...