openssl编程之md5

 



/*

* md5.cc

* - Using md5 with openSSL. MD5 returns a 128-bit hash value from a string.

*   fangying 2012-4-3

*/



#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <io.h>

#include <openssl/md5.h>





long filesize(FILE *stream)

{

   long curpos, length;



   curpos = ftell(stream);

   fseek(stream, 0L, SEEK_END);

   length = ftell(stream);

   fseek(stream, curpos, SEEK_SET);

   return length;

}





int main() {

    FILE *fp;

    MD5_CTX hash_ctx;

    unsigned long flength = 0L;

    char filepath[128];

    char *str_file;

    unsigned char hash_ret[16];

    int i;



    printf("md5sum.exe version 1.0 create by fangying\n");

    printf("-------------------------------------------\n");

    printf("please input the file path : ");

    gets(filepath);

    printf("\nfilepath is : %s\n",filepath);

    //open the specified file



    if((fp = fopen(filepath,"rb")) == NULL){

        printf("Can't open file: %s \n",filepath);

        printf("Press any key to exit! \n");

        getchar();

        return 2;

    }

    // print

    printf("input file is : %s \n", filepath);



    //get file size

    flength = filesize(fp);

    printf("file size is: %ld byte(s) \n",flength);

    str_file = (char *)calloc(flength, sizeof(char));



    //read form the beginning

    rewind(fp);



    if ((fread(str_file, 1, flength, fp)) != flength)

    {

        printf("fread() length is : %ld \n",fread(str_file, flength, 1, fp));

        printf("fread() does't match flength\n");

    };





    // initialize a hash context

    MD5_Init(&hash_ctx);

    // update the input string to the hash context (you can update

    // more string to the hash context)

    MD5_Update(&hash_ctx, str_file, flength);



    // compute the hash result

    MD5_Final(hash_ret, &hash_ctx);





    printf("MD5 digest : ");

    for (i=0; i<32; ++i) {

        if (i % 2 == 0) {

            printf("%x", (hash_ret[i/2] >> 4) & 0xf);

        } else {

            printf("%x", (hash_ret[i/2]) & 0xf);

        }

    }

    printf("\npress any key to exit!");

    getchar();



    //free memory and close file

    free(str_file);

    fclose(fp);

    return 0;

}











 

 

你可能感兴趣的:(OpenSSL)