How do I use boost :: hash to get a hash of the contents of a file?

Can boost: hash function be used to generate a hash of the contents of a fixed length file like MD5?

Is there a quick fix for this?

If not, what's the easiest way?

+3


source to share


1 answer


No, Boost does not implement MD5. To do this, use the crypto / hash library.

CryptoC ++ is good in my experience.

OpenSSL implements all the popular digests, here's a sample that uses OpenSSL:



Live On Coliru

#include <openssl/md5.h>
#include <iostream>
#include <iomanip>

// Print the MD5 sum as hex-digits.
void print_md5_sum(unsigned char* md) {
    for(unsigned i=0; i <MD5_DIGEST_LENGTH; i++) {
        std::cout << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(md[i]);
    }
}

#include <string>
#include <vector>
#include <fstream>

int main(int argc, char *argv[]) {
    using namespace std;
    vector<string> const args(argv+1, argv+argc);

    for (auto& fname : args) {

        MD5_CTX ctx;
        MD5_Init(&ctx);

        ifstream ifs(fname, std::ios::binary);

        char file_buffer[4096];
        while (ifs.read(file_buffer, sizeof(file_buffer)) || ifs.gcount()) {
            MD5_Update(&ctx, file_buffer, ifs.gcount());
        }
        unsigned char digest[MD5_DIGEST_LENGTH] = {};
        MD5_Final(digest, &ctx);

        print_md5_sum(digest);
        std::cout << "\t" << fname << "\n";
    }
}

      

+3


source







All Articles