Russian Qt Forum

Qt => Общие вопросы => Тема начата: -=QT=- от Август 15, 2007, 14:27



Название: MD5 и потоки пота и крови :)
Отправлено: -=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 минут:

 Дебаг ни чего не дал в отладчике пустота от не доходить до брекпоинта. Буду ждать. Может дойдет.


Название: MD5 и потоки пота и крови :)
Отправлено: vaprele07 от Август 15, 2007, 14:41
В 4.3 есть QCryptographicHash
Как ты получаешь правильное значение хэша? всего файла целиком или суммой строк, строки как известно заканчиваются служебным-и символами,


Название: MD5 и потоки пота и крови :)
Отправлено: Вячеслав от Август 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  обедню портит ;)


Название: MD5 и потоки пота и крови :)
Отправлено: Admin от Август 15, 2007, 15:43
к сведению md5 в php и perl считается поразному))


Название: MD5 и потоки пота и крови :)
Отправлено: Вячеслав от Август 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

И скорее _данные_ по другому подсовываються .....


Название: MD5 и потоки пота и крови :)
Отправлено: -=QT=- от Август 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 нетууууууу.....


Название: MD5 и потоки пота и крови :)
Отправлено: Вячеслав от Август 15, 2007, 15:58
НУ таки поменяй по тексту ;) QCryptographicHash на MD5 Ы?


Название: MD5 и потоки пота и крови :)
Отправлено: -=QT=- от Август 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


Название: MD5 и потоки пота и крови :)
Отправлено: Вячеслав от Август 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


Это правильно или как ? ж)


Название: MD5 и потоки пота и крови :)
Отправлено: Admin от Август 15, 2007, 17:04
когда я последний раз лазил - понял что в perl несколько md5
хотя давно было))


Название: MD5 и потоки пота и крови :)
Отправлено: -=QT=- от Август 15, 2007, 18:34
НЕ ПРАВИЛЬНО !
Должно быть 530e653e1ae034b869c4cc9c1e2e4754


Название: MD5 и потоки пота и крови :)
Отправлено: Tonal от Август 16, 2007, 07:10
Ну ты данные бы положил куда-нибудь, что ли. ;-)


Название: MD5 и потоки пота и крови :)
Отправлено: -=QT=- от Август 16, 2007, 07:34
Файл лежит тут: Скачать [webfile.ru]_libtestplugin.so с WebFile.RU (http://webfile.ru/1498639)


Название: MD5 и потоки пота и крови :)
Отправлено: Вячеслав от Август 16, 2007, 09:20
тебе md5 plagun'a нужон ?
Цитировать

530e653e1ae034b869c4cc9c1e2e4754 *[webfile.ru]_libtestplugin.so

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

Верхняя строка - утиль с лесного базара
Нижние - то че я клал...... ы?


Название: MD5 и потоки пота и крови :)
Отправлено: -=QT=- от Август 16, 2007, 09:27
АГА нужон.
Я вот тут пробую перелезть на 4.3.1
Вылазят фсякие фифчи. :)
=========================
Но как оказалось дело было не в бабине.