На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> сравнение ХЭШЕЙ? , как сравнить два хэша возвращённых из функции
    Цитата woojin @
    size_t vt = 0;

    MD5_Update(&ctx, (unsigned char*) context, vt);

    тут ошибка, у тебя размер данных всегда 0.
    Сообщение отредактировано: shm -
      ага!
      исправил на
      ExpandedWrap disabled
        size_t vt = strlen(context);

      после сравнения в обеих переменных cmp1 и cmp2 значится -3
      но странно что в ch1 после работы второй MD5 получается строка с двойным хэшем, т.е. первый и второй вместе
      это же вроде как не правильно или можно забить :rolleyes:
        Цитата woojin @
        сделал обёртку

        Там, кстати, можно не преобразовывать в строку.
          это как должно выглядеть?
            Также, только без цикла в конце, и без лишнего буфера
              Цитата woojin @
              но странно что в ch1 после работы второй MD5 получается строка с двойным хэшем

              ничего странно, там не нультерминированная строка вообще
              ExpandedWrap disabled
                static const size_t _sz = 32;
                char hash1[_sz + 1] = {0};
                char hash2[_sz + 1] = {0};
                Склеивается у тебя потому что ты в любом случае нвозвращаешь не строку

                Добавлено
                В Си строке отличается от массива только тем, что последний элемент у нее – ноль
                  Цитата Олег М @
                  Также, только без цикла в конце, и без лишнего буфера

                  оно:
                  ExpandedWrap disabled
                    void MD5 (const char* context, char* out, size_t size_out) {
                        MD5_CTX ctx;
                        MD5_Init(&ctx);
                        size_t vt = strlen(context);
                     
                        MD5_Update(&ctx, (unsigned char*) context, vt);
                     
                        unsigned char tmp[16];
                        MD5_Final(tmp, &ctx);
                    }

                  но при этом же в out ни чего не будет!

                  Цитата shm @
                  ничего странно, там не нультерминированная строка вообще

                  Цитата Олег М @
                  Склеивается у тебя потому что ты в любом случае нвозвращаешь не строку

                  Добавлено 1 минуту назад
                  В Си строке отличается от массива только тем, что последний элемент у нее – ноль

                  попробую добавить 33-й символ, что бы так было:
                  ExpandedWrap disabled
                            static const size_t _sz = 33;
                            char ch1[_sz] = {'\0'};
                            char ch2[_sz] = {'\0'};


                  Добавлено
                  с 33-м ни чего не приклеивается :victory:
                    Цитата woojin @
                    но при этом же в out ни чего не будет!

                    Будет, если out подставишь вместо tmp

                    Добавлено
                    Цитата woojin @
                    с 33-м ни чего не приклеивается

                    Еще бы. Но они у тебя совпадали, с начала.
                      Цитата
                      md5.cpp:22:5: error: no matching function for call to 'MD5_Final'
                      MD5_Final(out, &ctx);
                      ^~~~~~~~~
                      ./md5c.h:64:6: note: candidate function not viable: no known conversion from 'char *' to 'unsigned char *' for 1st argument
                      void MD5_Final (unsigned char [16], MD5_CTX *);

                      ругается!
                      ну в принципе правильно, tmp был 16, а out 32
                        Нет. Потому что у тебя out объявлен как char*, а надо как unsigned char*
                          на "моей" функции пример покажи, как мне это сделать, что бы потом можно было возвращаемое значение использовать в сравнении
                          Сообщение отредактировано: woojin -
                            примерно так
                            ExpandedWrap disabled
                              void MD5 (const char* context, unsigned char* out, size_t size_out) {
                                  MD5_CTX ctx;
                                  MD5_Init(&ctx);
                                  size_t vt = strlen(context);
                               
                                  MD5_Update(&ctx, (unsigned char*) context, vt);
                               
                                  MD5_Final(out, &ctx);
                              }
                               
                               
                              .................
                              static const size_t _sz = 16;
                              unsigned char hash1[_sz] = {0};
                              unsigned char hash2[_sz] = {0};
                               
                              MD5(...., hash1, _sz);
                              MD5(...., hash1, _sz);
                               
                              if (memcmp(hash1, has2, _sz) != 0)
                              //NOT_EQUAL
                            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                            0 пользователей:


                            Рейтинг@Mail.ru
                            [ Script execution time: 0,0363 ]   [ 16 queries used ]   [ Generated: 20.04.24, 03:53 GMT ]