同じフォルダにある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