목차
- C openssl 라이브러리 활용 개발 환경 구성 이전 포스팅
- sha256 해시 관련 예제 이전 포스팅
- opendir 특정 디렉토리 내의 모든 파일 출력 예제 이전 포스팅
- 특정 디렉토리 내의 모든 파일 구하기 예제
- 모든 파일의 SHA256 해시 값 구하기 예제
C openssl 라이브러리 활용 개발 환경 구성 이전 포스팅
오늘 포스팅에서는 특정 디렉토리 안에 있는 모든 파일의 SHA 256 해시 값을 출력하는 예제를 진행해보겠습니다. 이를 위해서는 openssl 라이브러리 연동이 반드시 필요합니다. C 언어로 openssl 라이브러리를 사용할 수 있도록 개발 환경을 구성해주세요. 아래 링크를 참고하면 구성이 가능합니다.
2023.07.28 - [C] - [C/C++] Openssl 정적 라이브러리 빌드 및 Codelite 설치, 개발 환경 구성(ubuntu, codelite)
[C/C++] Openssl 정적 라이브러리 빌드 및 Codelite 설치, 개발 환경 구성(ubuntu, codelite)
목차 이전 openssl 정적 라이브러리 빌드 포스팅 Codelite 설치 예제 Codelite 프로젝트 생성 openssl 정적 라이브러리 링크 정상 설치 확인 간단 예제 1. 이전 openssl 정적 라이브러리 빌드 포스팅 이전 포
salguworld.tistory.com
sha256 해시 관련 예제 이전 포스팅
그리고 SHA 256 이란 단방향 암호화를 의미합니다. 따라서 아래의 이전 포스팅을 참고하여 위에서 확인한 openssl 라이브러리의 sha 256 관련 함수 사용법을 확인해주세요.
2023.07.28 - [C] - [C/C++] Openssl 활용 SHA256 해시 예제
[C/C++] Openssl 활용 SHA256 해시 예제
목차 SHA256이란? 이전 빌드 환경 구성 포스팅 C Openssl SHA256 컨텍스트 생성 예제 C Openssl SHA256 해시 예제 C Openssl 문자열 입력받아 실시간 SHA256 해시 예제 C Openssl 파일 SHA256 해시 예제 MD5, SHA1, SHA256
salguworld.tistory.com
opendir 특정 디렉토리 내의 모든 파일 출력 예제 이전 포스팅
특정 디렉토리 내의 모든 파일의 경로를 구하기 위해서는 opendir, readdir, closedir에 대한 함수 사용법을 알아야합니다. 따라서 아래의 이전 포스팅을 참고하여 C에서 특정 디렉토리 내 파일 경로를 구하는 방법을 확인해주세요. 모든 파일의 경로를 파악하여 파일을 열고 해당 데이터들을 해시할 수 있습니다.
2023.08.09 - [C] - [C/C++] 특정 디렉토리의 모든 파일 경로 출력 예제(opendir, readdir, closedir)
[C/C++] 특정 디렉토리의 모든 파일 경로 출력 예제(opendir, readdir, closedir)
목차 디렉토리명 출력을 위한 printf 이전 포스팅 파일 출력을 위한 특정 디렉토리 경로 입력받기 예제 특정 디렉토리 열기 예제(opendir) 디렉토리 내에 모든 파일 경로 출력 예제(readdir) 디렉토리
salguworld.tistory.com
특정 디렉토리 내의 모든 파일 구하기 예제
자 이제 위의 포스팅에서 확인한 것과 같이 opendir과 readdir을 통해 사용자에게 입력받은 디렉토리로부터 모든 파일의 경로를 출력합니다. 이 경로들을 이용하여 sha256 해시를 진행할 예정입니다. 아래는 예제 코드입니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
void processFilesInDirectory(const char *dirPath) {
struct dirent *entry;
DIR *dir = opendir(dirPath);
if (dir == NULL) {
perror("디렉토리 열기 실패");
return;
}
while ((entry = readdir(dir)) != NULL) {
if (entry->d_type == DT_REG) {
char filePath[256];
snprintf(filePath, sizeof(filePath), "%s/%s", dirPath, entry->d_name);
printf("%s\n", filePath);
}
}
closedir(dir);
}
int main() {
char dirPath[256];
printf("디렉토리 경로를 입력하세요: ");
scanf("%s", dirPath);
printf("\n대상 디렉토리 : %s\n\n", dirPath);
processFilesInDirectory(dirPath);
return 0;
}
모든 파일의 SHA256 해시 값 구하기 예제
위에서 구한 모든 파일의 경로를 이용하여 각각의 파일을 열고 데이터를 읽습니다. 이후 openssl의 SHA256 관련 함수를 통해 해시를 수행합니다. 아래는 예제입니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <openssl/sha.h>
void calculateSHA256(const char *filePath) {
unsigned char hash[SHA256_DIGEST_LENGTH];
unsigned char buffer[1024];
size_t bytesRead;
FILE *file = fopen(filePath, "rb");
if (file == NULL) {
printf("%s 파일 열기 실패\n", filePath);
return;
}
SHA256_CTX sha256;
SHA256_Init(&sha256);
while ((bytesRead = fread(buffer, 1, sizeof(buffer), file)) > 0) {
SHA256_Update(&sha256, buffer, bytesRead);
}
SHA256_Final(hash, &sha256);
fclose(file);
printf("파일: %s\t\t\tSHA-256 해시값:\t", filePath);
for (int i = 0; i < SHA256_DIGEST_LENGTH; i++) {
printf("%02x", hash[i]);
}
printf("\n");
}
void processFilesInDirectory(const char *dirPath) {
struct dirent *entry;
DIR *dir = opendir(dirPath);
if (dir == NULL) {
perror("디렉토리 열기 실패");
return;
}
while ((entry = readdir(dir)) != NULL) {
if (entry->d_type == DT_REG) {
char filePath[256];
snprintf(filePath, sizeof(filePath), "%s/%s", dirPath, entry->d_name);
calculateSHA256(filePath);
}
}
closedir(dir);
}
int main() {
char dirPath[256];
printf("디렉토리 경로를 입력하세요: ");
scanf("%s", dirPath);
printf("\n대상 디렉토리 : %s\n\n", dirPath);
processFilesInDirectory(dirPath);
return 0;
}