首頁 >後端開發 >C++ >如何用 C 語言計算檔案的 MD5 雜湊值?

如何用 C 語言計算檔案的 MD5 雜湊值?

DDD
DDD原創
2024-11-12 14:50:02773瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn