Russian Qt Forum
Июнь 11, 2024, 15:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: MD5 и потоки пота и крови :)  (Прочитано 11301 раз)
-=QT=-
Гость
« : Август 15, 2007, 14:27 »

Попробовал сделать реализацию MD5 как в этом посте:
http://prog.org.ru/forum/topic_1080.html
Но правильную сумму она не считает почемуто.

Код:
QFile file( fileName );
QString sumMD5;
sumMD5.clear();
if ( file.open( QIODevice::ReadOnly ) )
{
   MD5 hash;
   QString line;

   QDataStream in( &file );
   while (!in.atEnd())
     {
         line.clear();
         in >> line;
         hash.update(line);
      }
    sumMD5 = hash.final();
    file.close();
 }

на выходе получаю : d41d8cd98f00b204e9800998ecf8427e
Это хеш пустой строки
Ну да ладно ведь мы не ищем легких путей Улыбающийся
пробуем следующее:

Код:
 ....                  
    QTextStream in(&file);
    while (!in.atEnd())
       {
           line.clear();
           line = in.readLine();
           hash.update(line);
        }
....

Получаем долгожданное изменение хеша : 0cff1f718506c3f27fea7af320c3f13d

Но в итоге оказывается, что правильное значение хеша :
530e653e1ae034b869c4cc9c1e2e4754

Кто сталкивался с таким Грустный

Или это я в чем-то ошибся, тогда ткните носом.
Заранее спасибо!!!!

добавлено спустя 36 минут:

 Попытка сделать это так:
Код:
                QString sumMD5;
                sumMD5.clear();
                MD5 hash;

                    QFile *filech = new QFile( fileName );
                    if (filech->open(QIODevice::ReadOnly | QIODevice::Text))
                    {

                        while (!filech->atEnd())
                        {
                            QByteArray line = filech->readLine();
                            hash.update(line);
                        }
                        sumMD5 = hash.final();
                    }
                    filech->close();

Не увенчалась успехом, программа просто висит при загрузке (делает что-то). Ша попробую отдебагить....

добавлено спустя 8 минут:

 Дебаг ни чего не дал в отладчике пустота от не доходить до брекпоинта. Буду ждать. Может дойдет.
Записан
vaprele07
Гость
« Ответ #1 : Август 15, 2007, 14:41 »

В 4.3 есть QCryptographicHash
Как ты получаешь правильное значение хэша? всего файла целиком или суммой строк, строки как известно заканчиваются служебным-и символами,
Записан
Вячеслав
Гость
« Ответ #2 : Август 15, 2007, 14:51 »

Код:

int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);

QCryptographicHash hash(QCryptographicHash::Md5);
QFile file("md5.cpp");

if (!file.open(QIODevice::ReadOnly) )
         return -1;

QByteArray all;
     while (!file.atEnd()) {
         QByteArray line = file.read(1024);
       hash.addData(line);
all+=line;
     }


    fprintf(stderr, "%s\r\n",hash.result().toHex().data() );
fprintf(stderr, "%s\r\n",QCryptographicHash::hash(all,QCryptographicHash::Md5).toHex().data() );

    return 0;
}

А вообще QIODevice::Text  обедню портит Подмигивающий
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #3 : Август 15, 2007, 15:43 »

к сведению md5 в php и perl считается поразному))
Записан
Вячеслав
Гость
« Ответ #4 : Август 15, 2007, 15:46 »

Мя !? Это как ? Вообще-то алгоритм жесткий
Цитировать

Network Working Group                                          R. Rivest
Request for Comments: 1321           MIT Laboratory for Computer Science
                                             and RSA Data Security, Inc.
                                                              April 1992


                     The MD5 Message-Digest Algorithm

И скорее _данные_ по другому подсовываються .....
Записан
-=QT=-
Гость
« Ответ #5 : Август 15, 2007, 15:54 »

Цитата: "Вячеслав"
Код:

int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);

QCryptographicHash hash(QCryptographicHash::Md5);
QFile file("md5.cpp");

if (!file.open(QIODevice::ReadOnly) )
         return -1;

QByteArray all;
     while (!file.atEnd()) {
         QByteArray line = file.read(1024);
       hash.addData(line);
all+=line;
     }


    fprintf(stderr, "%s\r\n",hash.result().toHex().data() );
fprintf(stderr, "%s\r\n",QCryptographicHash::hash(all,QCryptographicHash::Md5).toHex().data() );

    return 0;
}

А вообще QIODevice::Text  обедню портит Подмигивающий


Круто!
Я просто забыл сказать QT 4.2.3
А там QCryptographicHash нетууууууу.....
Записан
Вячеслав
Гость
« Ответ #6 : Август 15, 2007, 15:58 »

НУ таки поменяй по тексту Подмигивающий QCryptographicHash на MD5 Ы?
Записан
-=QT=-
Гость
« Ответ #7 : Август 15, 2007, 16:12 »

Цитата: "Admin"
к сведению md5 в php и perl считается поразному))


админ проверил всё одинаково
<?php echo md5('lalala'); ?>

====
use Digest::Perl:MD5 'md5_hex' ;
print 'Digest is ',md5_hex('lalala'),"\n" ;
===

++++++++++++++++++++++++++++++++++
9aa6e5f2256c17d2d430b100032b997c

добавлено спустя 4 минуты:

 
Цитата: "Вячеслав"
НУ таки поменяй по тексту Подмигивающий QCryptographicHash на MD5 Ы?

Получается : 4ceb0c0c641ed9aed684373467eff6a4
Записан
Вячеслав
Гость
« Ответ #8 : Август 15, 2007, 16:12 »

Цитата: "-=QT=-"
Цитата: "Admin"
к сведению md5 в php и perl считается поразному))


админ проверил всё одинаково
<?php echo md5('lalala'); ?>

====
use Digest::Perl:MD5 'md5_hex' ;
print 'Digest is ',md5_hex('lalala'),"\n" ;
===

++++++++++++++++++++++++++++++++++
9aa6e5f2256c17d2d430b100032b997c


А кто в этом сомневалси ?
Цитата: "-=QT=-"
добавлено спустя 4 минуты:

 
Цитата: "Вячеслав"
НУ таки поменяй по тексту Подмигивающий QCryptographicHash на MD5 Ы?

Получается : 4ceb0c0c641ed9aed684373467eff6a4


Это правильно или как ? ж)
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #9 : Август 15, 2007, 17:04 »

когда я последний раз лазил - понял что в perl несколько md5
хотя давно было))
Записан
-=QT=-
Гость
« Ответ #10 : Август 15, 2007, 18:34 »

НЕ ПРАВИЛЬНО !
Должно быть 530e653e1ae034b869c4cc9c1e2e4754
Записан
Tonal
Гость
« Ответ #11 : Август 16, 2007, 07:10 »

Ну ты данные бы положил куда-нибудь, что ли. ;-)
Записан
-=QT=-
Гость
« Ответ #12 : Август 16, 2007, 07:34 »

Файл лежит тут: Скачать [webfile.ru]_libtestplugin.so с WebFile.RU
Записан
Вячеслав
Гость
« Ответ #13 : Август 16, 2007, 09:20 »

тебе md5 plagun'a нужон ?
Цитировать

530e653e1ae034b869c4cc9c1e2e4754 *[webfile.ru]_libtestplugin.so

C:\Work\Projects\t\md5>md5.exe
530e653e1ae034b869c4cc9c1e2e4754
530e653e1ae034b869c4cc9c1e2e4754

Верхняя строка - утиль с лесного базара
Нижние - то че я клал...... ы?
Записан
-=QT=-
Гость
« Ответ #14 : Август 16, 2007, 09:27 »

АГА нужон.
Я вот тут пробую перелезть на 4.3.1
Вылазят фсякие фифчи. Улыбающийся
=========================
Но как оказалось дело было не в бабине.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.135 секунд. Запросов: 19.