首页 > 后端开发 > C++ > 正文

如何用 C 语言计算文件的 MD5 哈希值?

DDD
发布: 2024-11-12 14:50:02
原创
700 人浏览过

How to Calculate an MD5 Hash from a File in C  ?

从 C 中的文件计算 MD5 哈希

获取 C 中文件的 MD5 哈希对于数据安全性和完整性检查至关重要。在本文中,我们将探索一个简单的 C 实现,它可以计算和显示文件的 MD5 哈希值。

该实现利用 OpenSSL 库来执行 MD5 计算。它包括以下功能:

  • 将文件读入缓冲区
  • 使用 MD5 函数计算哈希
  • 将结果打印为十六进制数字

代码首先打开指定的文件并使用 mmap() 将其映射到内存。这允许应用程序将文件作为内存中的缓冲区来使用,从而促进高效的 MD5 计算。然后,MD5() 函数计算哈希值并将其存储在预定义的数组中。

最后,print_md5_sum() 函数将 MD5 哈希值转换为十六进制数字,并将其与文件名一起打印。这样可以轻松验证和比较文件完整性。

代码如下:

#include <openssl/md5.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

unsigned char result[MD5_DIGEST_LENGTH];

// Print the MD5 sum as hex-digits.
void print_md5_sum(unsigned char *md) {
    int i;
    for (i = 0; i < MD5_DIGEST_LENGTH; i++) {
        printf("%02x", md[i]);
    }
}

// Get the size of the file by its file descriptor
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;
}
登录后复制

以上是如何用 C 语言计算文件的 MD5 哈希值?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板