QT 如何对压缩文件进行md5校验?


        功能需求:就是通过http从php端下载下来一个.gz的文件,需要对下载下来的文件进行MD5校验,需要通过程序得到一个MD5字符串,同时,php端的同事提供一个MD5字符串,这里将两个字符串进行校验,一样就说明下载下来的文件完整,不一样就说明不完整需要重新下载。下载功能已完成,现在就是对下载下来的.gz压缩文件进行MD5校验。

那么这个MD5的值,程序怎么计算出来呢?看下面的代码:

/**
 * @brief 将文件md5校验,生成一个字符串.
 * @return
 */
QString MD5::StartMd5()
{
     QString str;
     QFile localFile("/usr/local/VP/22.gz");

     if (!localFile.open(QIODevice::ReadOnly))
     {
         qDebug() << "file open error.";
         return 0;
     }

     QCryptographicHash ch(QCryptographicHash::Md5);

     quint64 totalBytes = 0;
     quint64 bytesWritten = 0;
     quint64 bytesToWrite = 0;
     quint64 loadSize = 1024 * 4;
     QByteArray buf;

     totalBytes = localFile.size();
     bytesToWrite = totalBytes;

     while (1)
     {
         if(bytesToWrite > 0)
         {
             buf = localFile.read(qMin(bytesToWrite, loadSize));
             ch.addData(buf);
             bytesWritten += buf.length();
             bytesToWrite -= buf.length();
             buf.resize(0);
         }
         else
         {
             break;
         }

         if(bytesWritten == totalBytes)
         {
             break;
         }
     }

     localFile.close();
     QByteArray md5 = ch.result();
     str = md5.toHex();
     qDebug() << md5.toHex();

     return  str;
}

上面的代码是可以将文件进行md5校验,下面有一种方式是对文本进行MD5校验。

#
#
QString MD5::StartMd5()
{
     QFile file("/usr/local/VP/22.txt");
     QTextStream in(&file);
     QString str;
     QByteArray bb;
     if(file.open(QIODevice::ReadOnly  | QIODevice::Text))
     {
         str = in.readAll();
         qDebug() << str;
         bb = QCryptographicHash::hash ( str.toLatin1(), QCryptographicHash::Md5 );
         str = bb.toHex();
     }
     file.close();

     return  str;
}


上一篇 下一篇