曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3879|回复: 0
打印 上一主题 下一主题

MD5() --- 可用来计算某个文件的 md5 值

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
跳转到指定楼层
楼主
发表于 2015-4-17 23:48:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MD5() 原型是:
  1. #include <openssl/md5.h>
  2. 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() ,它用来映射某个文件,该函数的具体介绍请参考本版相关帖子。

可以利用网上的一些工具,来检验一下该程序是否计算正确。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-4 00:26 , Processed in 0.063035 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表