>백엔드 개발 >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 해시를 가져오는 것은 데이터 보안 및 무결성 검사에 필수적입니다. 이 기사에서는 파일의 MD5 해시를 계산하고 표시할 수 있는 간단한 C 구현을 살펴보겠습니다.

이 구현은 OpenSSL 라이브러리를 활용하여 MD5 계산을 수행합니다. 여기에는 다음 기능이 포함되어 있습니다.

  • 버퍼로 파일 읽기
  • MD5 함수를 사용하여 해시 계산
  • 결과를 16진수로 인쇄

코드는 지정된 파일을 열고 mmap()을 사용하여 메모리에 매핑하는 것으로 시작됩니다. 이를 통해 응용 프로그램은 파일을 메모리의 버퍼로 사용하여 효율적인 MD5 계산을 촉진할 수 있습니다. 그런 다음 MD5() 함수는 해시를 계산하여 미리 정의된 배열에 저장합니다.

마지막으로 print_md5_sum() 함수는 MD5 해시를 16진수로 변환하여 파일 이름과 함께 인쇄합니다. 이를 통해 파일 무결성을 쉽게 확인하고 비교할 수 있습니다.

코드는 다음과 같습니다.

#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으로 문의하세요.