1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
/*=========================================================================
Program: GDCM (Grassroots DICOM). A DICOM library
Copyright (c) 2006-2011 Mathieu Malaterre
All rights reserved.
See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
#include "md5.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
void process_file(const char *filename, md5_byte_t *digest)
{
int di;
size_t file_size, read;
void *buffer;
md5_state_t state;
FILE *file = fopen(filename, "rb");
/* go to the end */
/*int*/ fseek(file, 0, SEEK_END);
file_size = ftell(file);
/*int*/ fseek(file, 0, SEEK_SET);
buffer = malloc(file_size);
read = fread(buffer, 1, file_size, file);
assert( read == file_size );
md5_init(&state);
md5_append(&state, (const md5_byte_t *)buffer, file_size);
md5_finish(&state, digest);
/*printf("MD5 (\"%s\") = ", test[i]); */
for (di = 0; di < 16; ++di)
{
printf("%02x", digest[di]);
}
printf("\t%s\n", filename);
free(buffer);
fclose(file);
}
int main(int argc, char *argv[])
{
md5_byte_t digest1[16];
md5_byte_t digest2[16];
if( argc < 3 )
{
return 1;
}
/* Do file1 */
process_file(argv[1], digest1);
/* Do file2 */
process_file(argv[2], digest2);
return memcmp(digest1, digest2, 16);
}
|