openssl API md5效验

#include 
#include 
#include 
#include 
#include 
int main(int argc, char **argv)
{
    MD5_CTX ctx;
    unsigned char md[32 + 1];
    char    md5[32 + 1];
    char    tmp[2];
    char    buff[256];
    char    *filename;
    FILE    *fp;
    int     i;
    if (argc < 2) {
        printf("Usage:%s n", argv[0]);
        exit(1);
    }
    filename = argv[1];
    memset(md5, 0x00, sizeof(md5));
    memset(md, 0x00, sizeof(md));
    if(MD5_Init(&ctx) == 0) {
        perror("MD5_Init");
        exit(1);
    }
    if((fp=fopen(filename,"rb")) == NULL) {
        perror("fopen");
        exit(1);
    }
    while (! feof(fp) ) {
        memset(buff, 0x00, sizeof(buff));
        fgets(buff, 256, fp);
        if(MD5_Update(&ctx, buff, strlen(buff)) == 0) {
            perror("MD5_Update");
            exit(1);
        }
    }
    fclose(fp);
    if(MD5_Final(md, &ctx) == 0) {
        perror("MD5_Final:");
        exit(1);
    }
        for(i=0; i< 16; i++) {
        memset(tmp, 0x00, sizeof(tmp));
            sprintf(tmp, "%02X", md[i]);
            strcat(md5, tmp);
    }
    printf("md5(%s):%sn", filename, md5);
    return 0;
}
root@bt:~/c# cc -o testmd5 testmd5.c -lssl
root@bt:~/c# ./testmd5 1.c
md5(1.c):1558734758F8CB08D6DB8D5B57E71BF7
root@bt:~/c# ./testmd5 2.c
md5(2.c):0C8E614EC0AB5B5CEF90D012F5C11797
root@bt:~/c# openssl md5 1.c
MD5(1.c)= 1558734758f8cb08d6db8d5b57e71bf7
root@bt:~/c# openssl md5 2.c
MD5(2.c)= 0c