Click here to Skip to main content
14,866,794 members
Articles / Programming Languages / C
Posted 3 Jan 2009


27 bookmarked

MD5 File Creation and Verification

Rate me:
Please Sign up or sign in to vote.
3.35/5 (10 votes)
3 Jan 2009CPOL
A tool for creating/verifying MD5 files


In cryptography, MD5 (Message-Digest algorithm 5) is a widely used, partially insecure cryptographic hash function with a 128-bit hash value. As an Internet standard (RFC 1321), MD5 has been employed in a wide variety of security applications, and is also commonly used to check the integrity of files. An MD5 hash is typically expressed as a 32 digit hexadecimal number.

For more information regarding MD5, click here.


This tool is for calculating/verifying MD5 value of an EXE or multiple EXEs in a folder and its sub folders.

Using the Code

The basic function in this tool is as follows. This function will accept the EXE "FileName" and will return the MD5 value in "MD5". Anyone can use this function in his/her code to get the MD5 value. Just copy and paste this function in your code. You should include the header <wincrypt.h>.

int CalculateMD5(CString FileName, CString &MD5)
    const size_t StringSize = FileName.GetLength() + 1;
    size_t CharactersConverted = 0;

    char *file = new char[StringSize];
    //char file[1024];
    wcstombs_s(&CharactersConverted, file, 
               FileName.GetLength()+1, FileName, _TRUNCATE);

    int i, j;
    FILE *fInput;
    MD5Context md5Hash;
    unsigned char bBuffer[4096];
    unsigned char b;
    char c;
        MessageBoxW(0, L"Could not start crypto library", 
                    L"MD5", MB_ICONERROR);
        return 0;
    fInput = fopen(file, "rb");
       MessageBoxW(0, L"Failed to open - Invalid File", 
                   L"MD5", MB_ICONERROR);
        return 0;
    memset(&md5Hash, 0, sizeof(MD5Context));
        unsigned int nCount = fread(bBuffer, sizeof(unsigned char), 
                                    4096, fInput);
        MD5Update(&md5Hash, bBuffer, nCount);
    //printf("\nChecksum of '%s' is: ", argv[1]);
    char *Value = new char[1024];int k = 0;
    for(i = 0; i < 16; i++)
        b = md5Hash.digest[i];
        for(j = 4; j >= 0; j -= 4)
            c = ((char)(b >> j) & 0x0F);
            if(c < 10) c += '0';
            else c = ('a' + (c - 10));
            //printf("%c", c);
			Value[k] = c;
    Value[k] = '\0';
    //CString cString;
    MD5 = CString(Value);
    delete file;
    delete Value;
    return 1;


  • 3rd January, 2009: Initial post


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Shaheer Abdulrahiman
Software Developer
India India
No Biography provided

Comments and Discussions

Questionhow to Pin
Member 1161303116-Apr-15 15:13
MemberMember 1161303116-Apr-15 15:13 
GeneralMD5 Source in C++ Pin
none28-Feb-09 4:54
Membernone28-Feb-09 4:54 
GeneralMD5 is obsolete Pin
wim ton5-Jan-09 23:09
Memberwim ton5-Jan-09 23:09 
GeneralRe: MD5 is obsolete Pin
TobiasP6-Jan-09 8:44
MemberTobiasP6-Jan-09 8:44 
GeneralMy vote of 2 Pin
zengkun1005-Jan-09 16:58
Memberzengkun1005-Jan-09 16:58 
General牛B Pin
Member 45990724-Jan-09 4:16
MemberMember 45990724-Jan-09 4:16 
GeneralRe: 牛B Pin
baijun19824-Jan-09 19:01
Memberbaijun19824-Jan-09 19:01 
GeneralRe: 牛B Pin
Enjon CHEN5-Apr-10 23:48
MemberEnjon CHEN5-Apr-10 23:48 
GeneralRe: 牛B Pin
haohui27-Oct-10 5:24
Memberhaohui27-Oct-10 5:24 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.