获取 C 中文件的 MD5 哈希对于数据安全性和完整性检查至关重要。在本文中,我们将探索一个简单的 C 实现,它可以计算和显示文件的 MD5 哈希值。
该实现利用 OpenSSL 库来执行 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中文网其他相关文章!