文件和字符串的md5算法

头文件

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

字符串的md5算法:

std::string MD5(std::string &data) {
        MD5_CTX ctx;
        std::ostringstream oss;
        unsigned char output[32];
        
        MD5_Init(&ctx);
        MD5_Update(&ctx, data.c_str(), data.length());
        MD5_Final(output, &ctx);
        
        for (int i = 0; i < 16; i++) {
            oss << std::hex << std::setw(2) << std::setfill(0) << (unsigned int)output[i];
        }
        
        return oss.str();
    }

文件的md5算法

std::string MD5(std::string path) {
        MD5_CTX ctx;
        std::ifstream reader;
        std::ostringstream oss;
        char buf[4096];
        unsigned char output[32];
        
        reader.open(path.c_str(), std::ios::binary);
        if (!reader.is_open())
            return std::string();
        
        MD5_Init(&ctx);
        
        while (!reader.eof()) {
            reader.read(buf, sizeof(buf));
            MD5_Update(&ctx, buf, reader.gcount());
        }
        
        MD5_Final(output, &ctx);
        
        reader.close();
        
        for (int i = 0; i < 16; i++) {
            oss << std::hex << std::setw(2) << std::setfill(0) << (unsigned int)output[i];
        }
        
        return oss.str();
    }
经验分享 程序员 微信小程序 职场和发展