diff options
Diffstat (limited to 'helper.cpp')
-rw-r--r-- | helper.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
@@ -7,6 +7,14 @@ #include <QString> #include <QByteArray> +#include <QFileInfo> +#include <QFile> + +#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1 +#include <md5.h> +#include <files.h> +#include <filters.h> +#include <hex.h> #include "helper.h" @@ -35,5 +43,37 @@ namespace Helper { return retval; } } + + const QString md5Sum(const QString &path){ + QFileInfo info(path); + if(!info.exists() || !info.isFile()){ + return QString(); + } + + using namespace CryptoPP; + Weak::MD5 hash; + std::string res; + QString retval; + if(info.size() < (5 * 1024 * 1024)){ + FileSource f(qPrintable(path), true, new HashFilter(hash, new HexEncoder(new StringSink(res)))); + retval = QString::fromStdString(res).toLower(); + }else{ + QFile file(path); + file.open(QIODevice::ReadOnly); + int offset = info.size() / 3; + file.seek(offset); + int numBytes = 512 * 1024; + char *data = new char[numBytes]; + int read = file.read(data, numBytes); + if(read != numBytes){ + delete [] data; + return QString(); + } + StringSource s((byte*)data, numBytes, true, new HashFilter(hash, new HexEncoder(new StringSink(res)))); + retval = QString::fromStdString(res).toLower(); + delete [] data; + } + return retval; + } } |