it-swarm.com.de

Wie erhalte ich die SHA-1/MD5-Prüfsumme einer Datei mit Qt?

Gibt es eine Möglichkeit, die MD5- oder SHA-1-Prüfsumme/den Hash einer Datei auf der Festplatte in Qt abzurufen?

Ich habe beispielsweise den Dateipfad und muss möglicherweise überprüfen, ob der Inhalt dieser Datei mit einem bestimmten Hashwert übereinstimmt.

25
user2282405

Öffnen Sie die Datei mit QFile und rufen Sie readAll() auf, um den Inhalt in eine QByteArray zu ziehen. Dann verwenden Sie das für den Aufruf von QCryptographicHash::hash(const QByteArray& data, Algorithm method).

In Qt5 können Sie addData() verwenden:

// Returns empty QByteArray() on failure.
QByteArray fileChecksum(const QString &fileName, 
                        QCryptographicHash::Algorithm hashAlgorithm)
{
    QFile f(fileName);
    if (f.open(QFile::ReadOnly)) {
        QCryptographicHash hash(hashAlgorithm);
        if (hash.addData(&f)) {
            return hash.result();
        }
    }
    return QByteArray();
}
44
cmannett85

Wenn Sie Qt4 verwenden, können Sie dies versuchen.

QByteArray fileChecksum(const QString &fileName, QCryptographicHash::Algorithm hashAlgorithm)
{
    QFile sourceFile(fileName);
    qint64 fileSize = sourceFile.size();
    const qint64 bufferSize = 10240;

    if (sourceFile.open(QIODevice::ReadOnly))
    {
        char buffer[bufferSize];
        int bytesRead;
        int readSize = qMin(fileSize, bufferSize);

        QCryptographicHash hash(hashAlgorithm);
        while (readSize > 0 && (bytesRead = sourceFile.read(buffer, readSize)) > 0) 
        {
            fileSize -= bytesRead;
            hash.addData(buffer, bytesRead);
            readSize = qMin(fileSize, bufferSize);
        }

        sourceFile.close();
        return QString(hash.result().toHex());
    }
    return QString();
}

Weil

bool QCryptographicHash :: addData (QIODevice * -Gerät)  

Liest die Daten aus dem geöffneten QIODevice-Gerät bis zum Ende und hascht es. Gibt true zurück, wenn das Lesen erfolgreich war.

Diese Funktion wurde in Qt 5.0 eingeführt.

Referenzen: https://www.qtcentre.org/threads/47635-Calculate-MD5-sum-of-a-big-file

0
Dana Yan