프로젝트

[텀프로젝트] 파일 압축&암호화 유틸리티 개발 - 1 ( 파일 선택 구현 )

poiri3r 2025. 12. 11. 16:00

안녕하세요, 최근들어 보안 공부에 대해 포스팅이 좀 많이 줄었는데, 과제랑 시험공부랑 프로젝트랑 겹쳐서 작성이 계속 미뤄지고 있어서, 학교 과제에서 나온 텀프로젝트에 대한 개발 일지를 한번 작성해보고자 합니다.

먼저 보안과목에 대한 프로젝트고 구상은 다음과 같습니다.

 

  • 프로젝트 명 : C언어 기반 보안 압축 유틸리티
  • 프로그램 개발 환경
    • 운영체제 : Windows 11
    • 언어 : C, C++
    • 보안 라이브러리 : OpenSSL
    • 압축 라이브러리 : zlib
    • 디렉터리 순회 : Windows API
    • 파일 경로 반환 : Windows.h
  • 프로그램 구조 및 주요 기능
    1. 데이터 압축 : zlib 라이브러리를 이용하여 입력된 데이터 파일을 효율적으로 압축한다.
    2. 데이터 암호화 : OpenSSL 라이브러리를 사용하여 압축된 데이터를 AES-256_GCM 방식으로 암호화한다. 암호화 키는 사용자가 입력한 비밀번호와 16바이트 Salt값을 결합하여 SHA-256해시를 통해 유도한다.
    3. 데이터 복호화 : 복호화시에는 사용자에게 비밀번호를 입력받고, 파일 헤더가 저장된 Salt 값을 참조하여 동일한 방식으로 키를 생성한 후 데이터를 복호화한다.
    4. 하이브리드 인터페이스 : C/C++을 병행하여 개발하며, 기본적으로 C언어를 베이스로 개발을 진행하나, 파일 선택시에는 사용자에게 보다 편한 인터페이스를 제공하기 위해 Windows.h의 GetOpenFIle 함수를 통해 GUI 방식의 파일 선택을 지원한다.
    5. (선택)배포 편의성 : 정적 링킹을 통해 여러명에게 배포할 때, 별도의 환경 설정 없이 실행 가능한 단일 실행 파일 형태로 배포할 수 있도록 하였다.

위의 내용들은 처음 프로젝트를 구상하면서 작성했던 프로젝트 제안서입니다.

아직 개발 초기 단계인데 현재까지 구현한 함수들은 다음과 같습니다.

1. read_file_content : 파일을 rb모드로 열어서, 파일의 크기를 측정하고, 메모리를 할당하고 버퍼에 데이터를 읽어온다.

2. process_file : read_file_content를 호출하는 함수로써, 파일을 읽어들인 뒤, 압축 및 암호화를 실행하는 메인 기능 함수이다.

3. OpenFile : 사용자가 파일을 선택하면 파일경로를 저장하고, C언어 문자 스타일로 변환하여 저장합니다.

 

빌드하고 실행하면 다음과 같이 실행파일을 지정할 수 있습니다.

파일을 선택하면 콘솔에 다음과 같이 뜹니다.

실제 txt파일의 크기를 확인해보겠습니다.

크기가 일치하는 걸 확인할 수 있습니다.

이제 암호화 로직이랑 압축 로직을 구현해야하는데 OpenSSL 사용법도 공부를 해야하기 때문에 다음 포스팅에 나눠서 작성해보도록 하겠습니다. 읽어주셔서 감사합니다