同じフォルダにあるtarget.isoというファイルのMD5ダイジェストを計算するサンプルです。よくわかってない部分もありますが、とりあえずメモ程度に残しておきます。
短いので添付せずにそのまま。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <openssl/md5.h> int main(){ FILE *fp; MD5_CTX c; unsigned char md[MD5_DIGEST_LENGTH]; char mdString[(MD5_DIGEST_LENGTH*2)+1]; int i, r, bytes; /* ここを大きくすると高速になる代わりにメモリを消費する */ /* 体感としては512を超えたあたりからはそんなに変わらない */ char buffer[8192]; /* MD5用の何かを初期化する(わかってない */ r = MD5_Init(&c); /* ファイルをオープン */ fp = fopen("target.iso", "r"); /* オープンできなかった場合エラーにする */ if(fp == NULL ){ printf("Cannot file open\n"); return(-1); } /* packet_sizeずつ読み込んでMD5を更新して行く */ while( ( bytes = fread(buffer, 1, sizeof(buffer), fp)) != 0 ){ r = MD5_Update(&c, buffer, bytes); } /* 読取り完了、クローズ */ fclose(fp); r = MD5_Final(md, &c); /* MD5を文字列に変換する */ for(i = 0; i < MD5_DIGEST_LENGTH; i++) sprintf(&mdString[i * 2], "%02x", (unsigned int)md[i]); /* 表示部分 */ printf("MD5: %s\n", mdString); return(0); }
md5.cにソースを保存した場合、下記の方法でコンパイルします。
$ gcc -lcrypto md5.c
特に引数はないので、実行はシンプルに
$ ./a.out