如何在Qt中生成md5文件

How to generate md5 of file in Qt?

本文关键字:md5 文件 Qt      更新时间:2023-10-16

我有代码,为字符串生成md5。现在我要为文件添加md5生成。它的工作与txt文件(xml, html, txt等),但当我试图做它与二进制文件(zip, bin, apk等)我看到错误的结果。我怎样才能正确地读取bin文件在(char*),以产生有效的哈希?

我试图使用TextStream,但结果是无效的

QFile file(fileName);
file.open(QIODevice::ReadOnly);
QTextStream in(&file);
QString t = in.readAll();
file.close();
string res = md5(t.toStdString());

我还尝试使用QByteArray,然后将byteArray转换为char*但它也不能正常工作。我该怎么修理它?

永远不要使用QStringQTextStream作为二进制数据。 它们用于Unicode文本,以众所周知的编码从字节解码。试图将它们用于二进制数据将愉快地默默地把它搞砸,因为默认情况下QString将尝试使用一些编码来解释输入数据,将其转换为其UTF-16存储,默默地跳过它无法理解的任何内容。

存储二进制数据的类是QByteArray,您可以使用QFile::read()方法在其中读取整个文件。

QByteArray data;
{
    QFile file(fileName);
    file.open(QIODevice::ReadOnly);
    data.readAll();
}
string res = md5(std::string(data.begin(), data.end());

请注意,我使用基于范围的构造函数构建std::string,因为仅使用std::string(data.data())(来自C字符串的构造函数)将在第一个嵌入的NUL处停止。