linux下MD5计算

    技术2025-12-22  6

     

    一,Open Terminal:

            echo abcde | md5sum

            计算abcde的md5值

            md5sum file1

            显示file1的md5值

            md5sum file1 > file2

            将file1的md5值保存到file2中

     

     

    二、code:

            include <stdio.h>

            include "openssl/md5.h"

    UInt32 CompareMD5(QString SrcFileName, QString TarFileName) { if(SrcFileName == TarFileName) return 1; UInt32 v_return = 0; UInt32 det = 0; unsigned char mdsrc[16], mdtar[16]; QFile srcfile(SrcFileName); QFile tarfile(TarFileName); //if(!(srcfile.open(QFile::ReadOnly | QFile::Text))) if(!(srcfile.open(QFile::ReadOnly))) { log_print(DVP_LOG_INTERFACE, "CompareMD5: Can not open %s!/n", SrcFileName.toStdString().c_str()); return v_return; } QByteArray srcdata = srcfile.readAll(); srcfile.close(); MD5((unsigned char*)(srcdata.constData()), srcdata.size(), mdsrc); //log_print(DVP_LOG_INTERFACE, "CompareMD5: %s MD5 is %s!/n", SrcFileName.toStdString().c_str(), mdsrc); //for(int i = 0; i < 16; i++) // log_print(DVP_LOG_INTERFACE, "%x", mdsrc[i]); //log_print(DVP_LOG_INTERFACE, "/n"); if(!(tarfile.open(QFile::ReadOnly))) { log_print(DVP_LOG_INTERFACE, "CompareMD5: Can not open %s!/n", TarFileName.toStdString().c_str()); return v_return; } QByteArray tardata = tarfile.readAll(); tarfile.close(); MD5((unsigned char*)(tardata.constData()), tardata.size(), mdtar); //log_print(DVP_LOG_INTERFACE, "CompareMD5: %s MD5 is %s!/n", TarFileName.toStdString().c_str(), mdtar); //for(int i = 0; i < 16; i++) // log_print(DVP_LOG_INTERFACE, "%x", mdtar[i]); //log_print(DVP_LOG_INTERFACE, "/n"); for(int i = 0; i < 16; i++) { if(mdsrc[i] != mdtar[i]) det += 1; } //log_print(DVP_LOG_INTERFACE, "CompareMD5: det=%d!/n", det); //if(strcmp((char*)mdsrc, (char*)mdtar) != 0) if(det > 0) { log_print(DVP_LOG_INTERFACE, "CompareMD5: %s MD5 is ", SrcFileName.toStdString().c_str()); for(int i = 0; i < 16; i++) log_print(DVP_LOG_INTERFACE, "%x", mdsrc[i]); log_print(DVP_LOG_INTERFACE, "/n"); log_print(DVP_LOG_INTERFACE, "CompareMD5: %s MD5 is ", TarFileName.toStdString().c_str()); for(int i = 0; i < 16; i++) log_print(DVP_LOG_INTERFACE, "%x", mdtar[i]); log_print(DVP_LOG_INTERFACE, "/n"); } else v_return = 1; return v_return; }

     

    第二种方法:

    int main(void) { MD5_CTX ctx; unsigned char outmd[16]={0}; int i=0; unsigned char *String = "hello/n"; printf("data=%s/n",String); MD5_Init(&ctx); MD5_Update(&ctx,"hel",3); MD5_Update(&ctx,"lo/n",3); MD5_Final(outmd,&ctx); for(i=0;i<16;i++) printf("%02x",outmd[i]); printf("/n"); return 0; }

    MD5_Update可以被多次调用,你每次从文件中读取部分内容,调用一次MD5_Update,循环往复,直到文件全部处理完毕。

    或者省劲的方法,直接通过popen()调用md5sum 命令。 popen("md5sum yourfile", "r');

     

    最新回复(0)