Is there a way to get the MD5 or SHA-1 checksum/hash of a file on disk in Qt?
For example, I have the file path and I might need to verify that the contents of that
If you are using Qt4, you can try this.
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();
}
Because
bool QCryptographicHash::addData(QIODevice *device)
Reads the data from the open QIODevice device until it ends and hashes it. Returns true if reading was successful.
This function was introduced in Qt 5.0.
References: https://www.qtcentre.org/threads/47635-Calculate-MD5-sum-of-a-big-file