MD5() 原型是:
- #include <openssl/md5.h>
- unsigned char *MD5(const unsigned char *d, unsigned long n, unsigned char *md);
复制代码
该函数可用来计算某个文件的 md5 值。它有 3 个参数,总的意思是:计算出 d 开始地址处的 n 个字节的 md5 值,并将该值存放在 md 所指向的缓冲区中;一般的,该缓冲区对于 MD5 来说,可用 MD5_DIGEST_LENGTH (16 个字节) 来定义大小。
示例:
[C] 纯文本查看 复制代码 #include <openssl/md5.h>
unsigned char result[MD5_DIGEST_LENGTH];
void print_md5_sum(unsigned char *md)
{
int i;
for (i = 0; i < MD5_DIGEST_LENGTH; i++) {
printf("%02x", md[i]);
}
}
unsigned long get_size_by_fd(int fd)
{
struct stat statbuf;
if (fstat(fd, &statbuf) < 0)
exit(-1);
return statbuf.st_size;
}
int main(int argc, char *argv[])
{
int file_descript;
unsigned long file_size;
char *file_buffer;
if (argc != 2) {
printf ("Must specify the file\n");
exit (-1);
}
printf ("using file:\t%s\n", argv[1]);
file_descript = open(argv[1], O_RDONLY);
if (file_descript < 0) exit (-1);
file_size = get_size_by_fd(file_descript);
printf ("file size:\t%lu\n", file_size);
file_buffer = mmap(0, file_size, PROT_READ, MAP_SHARED, file_descript, 0);
MD5((unsigned char *)file_buffer, file_size, result);
munmap(file_buffer, file_size);
print_md5_sum(result);
printf (" %s\n", argv[1]);
return 0;
}
这里主要有 2 个核心应用函数,一个是当然是 MD5() ,另一个是 mmap() ,它用来映射某个文件,该函数的具体介绍请参考本版相关帖子。
可以利用网上的一些工具,来检验一下该程序是否计算正确。
|