Bagaimana untuk Mengira Hash MD5 daripada Fail dalam C?

DDD
Lepaskan: 2024-11-12 14:50:02
asal
700 orang telah melayarinya

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

Mengira Cincang MD5 daripada Fail dalam C

Mendapatkan cincangan MD5 bagi fail dalam C adalah penting untuk keselamatan data dan semakan integriti. Dalam artikel ini, kami akan meneroka pelaksanaan C mudah yang boleh mengira dan memaparkan cincangan MD5 fail.

Pelaksanaan memanfaatkan perpustakaan OpenSSL untuk melaksanakan pengiraan MD5. Ia termasuk fungsi untuk:

  • Membaca fail ke dalam penimbal
  • Menggunakan fungsi MD5 untuk mengira cincang
  • Mencetak hasil sebagai digit heks

Kod bermula dengan membuka fail yang ditentukan dan memetakannya ke dalam memori menggunakan mmap(). Ini membolehkan aplikasi berfungsi dengan fail sebagai penimbal dalam ingatan, memudahkan pengiraan MD5 yang cekap. Fungsi MD5() kemudian mengira cincang dan menyimpannya dalam tatasusunan yang telah ditetapkan.

Akhir sekali, fungsi print_md5_sum() menukar cincang MD5 kepada digit heks dan mencetaknya bersama nama fail. Ini membolehkan pengesahan mudah dan perbandingan integriti fail.

Ini kodnya:

#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;
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Mengira Hash MD5 daripada Fail dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan