2013-05-05 3 views
20

Есть ли способ получить контрольную сумму/хэш MD5 или SHA-1 файла на диске в Qt?Как получить контрольную сумму SHA-1/MD5 файла с Qt?

Например, у меня есть путь к файлу, и мне может потребоваться проверить, соответствует ли содержимое этого файла определенному хеш-значению.

ответ

33

Открыть файл с QFile и позвонить readAll(), чтобы вытащить его содержимое в 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(); 
} 
+3

Он работал, я просто должен был добавить .toHex(). Благодаря! – user2282405

+12

readAll() читает все в памяти сразу, не очень хорошая идея для больших файлов. Я предпочел бы использовать addData (& file). –

+2

@FrankOsterfeld Я согласен, я был упрощен, чтобы понять суть проблемы - это обязанность OP, чтобы убедиться, что она не разбивает систему. – cmannett85

Смежные вопросы