如何使用Qt获取文件的SHA-1/MD5校验和?

use*_*405 26 c++ hash qt checksum

有没有办法在Qt中获取磁盘上文件的MD5或SHA-1校验和/哈希?

例如,我有文件路径,我可能需要验证该文件的内容是否与某个哈希值匹配.

cma*_*t85 46

QFile,打开文件,然后调用readAll()将其内容拉入a QByteArray.然后用它来进行QCryptographicHash::hash(const QByteArray& data, Algorithm method)通话.

在Qt5中,您可以使用addData():

// 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();
}
Run Code Online (Sandbox Code Playgroud)

  • readAll()一次将所有内容读入内存,对大文件不是一个好主意.我宁愿使用addData(&file). (17认同)
  • 它工作,我只需要添加.toHex().谢谢! (5认同)
  • @FrankOsterfeld我同意,我正在简化以解决问题 - OP的责任是确保它不会使系统崩溃. (2认同)