曲径通幽论坛

标题: MD5() --- 可用来计算某个文件的 md5 值 [打印本页]

作者: beyes    时间: 2015-4-17 23:48
标题: MD5() --- 可用来计算某个文件的 md5 值
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);
        }
}

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() ,它用来映射某个文件,该函数的具体介绍请参考本版相关帖子。

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






欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2