问:如何让应用程序获得自己的md5校验和

时间:2013-10-16 14:50:14

标签: c++ qt md5 checksum

使用Qt应用程序。我正在尝试让exe文件在运行时返回自己的md5校验和。我怎么能这样做?

我试过了:

QFile theFile("file.exe");
QByteArray thisFile;
if (theFile.open(QIODevice::ReadOnly))
{
    thisFile = theFile.readAll();
}
else
{
    qDebug() << "Can't open";
}

qDebug() << QString("%1").arg(thisFile.length());

fileMd5 = QString(QCryptographicHash::hash((thisFile), QCryptographicHash::Md5).toHex().toUpper());

qDebug() << fileMd5;

但是,这不会返回正确的值。

更新

我让它与其他文件一起工作。问题似乎是我在运行时无法读取它。

最终更新:

这是解决方案:

QFile theFile(QCoreApplication::applicationFilePath());
QByteArray thisFile;
if (theFile.open(QIODevice::ReadOnly))
{
    thisFile = theFile.readAll();
}
else
{
    qDebug() << "Can't open file.";
}

QString fileMd5 = QString(QCryptographicHash::hash((thisFile), QCryptographicHash::Md5).toHex());

qDebug() << fileMd5;

3 个答案:

答案 0 :(得分:0)

您忘记在open上致电theFile

if (!theFile.open(QIODevice::ReadOnly))
    // Handle error here

此外,您应该使用QCoreApplication::applicationFilePath()来获取可执行文件的路径。

答案 1 :(得分:0)

您必须创建一个独立的应用程序(让我们称之为myApp),检查MD5sum并将其与PHP脚本进行比较,并在需要时请求更新或直接加载应用程序。

像这样:myApp =&gt;需要更新? (更新):( TheRealApp

答案 2 :(得分:0)

好吧,看起来它只是找不到文件。我尝试了绝对路径而不是亲戚,它起作用了。我将不得不弄清楚出了什么问题,但看起来它在运行时可以自行解读。