QT 中 怎么用程序给 .gz这种压缩文件进行md5加密

三月桃花浪 2017-09-14 01:54:54
如题,我想做一个功能,就是通过http从php端下载下来一个.gz的文件,需要对下载下来的文件进行MD5加密,得到一个字符串,同时,php端的同事会给我一个MD5字符串和投生成的进行比较,一样就说明下载下来的文件完整,不一样就说明不完整需要重新下载。
下载功能已完成,现在就是对下载下来的.gz压缩文件进行MD5加密。
代码如下:

QFile file("/usr/local/VingooProject/res/download/a/1.gz");
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();


上述代码对txt文件加密,生成的md5码是正确的,就是对压缩文件不正确
大神帮忙看看上面的代码问题在哪里?3Q
...全文
955 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
三月桃花浪 2017-09-15
  • 打赏
  • 举报
回复
引用 3 楼 dext 的回复:
其实就是不要用 TEXT 方式打开
明白了
dext 2017-09-14
  • 打赏
  • 举报
回复
其实就是不要用 TEXT 方式打开
三月桃花浪 2017-09-14
  • 打赏
  • 举报
回复
大家还有什么好的方法,共享一下。
三月桃花浪 2017-09-14
  • 打赏
  • 举报
回复
在网上找了一些答案,找到一个正确答案:如下

/**
 * @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;
}
参考:QT 如何对压缩文件进行md5校验?

16,202

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧