x0FANSA-hk 님의 블로그

폴더 안 모든파일 자동 암호화 프로그램 본문

Planet

폴더 안 모든파일 자동 암호화 프로그램

x0fansa-hk 2026. 7. 18. 02:25

OpenSSL로 파일 여러개를 자동으로 암호화하기

 이전에(2026.07.17 - [Planet] - Openssl을 사용한 파일 자동 암호화 프로그램) 만들었던 프로그램 기반으로 제작하였습니다. 이번에는 파일 한개가 아니라, 폴더를 받아서 해당 폴더의 모든 파일에 대해서 암호화를 진행하는 프로그램입니다. 약간의 응용을 더한다면 파일명까지 암호화할수 있습니다. 백문이볼여일견이라고, 바로 시작해봅시다.

OpenSSL 다중파일 암호화.c
0.00MB
다중파일 이름백업.c
0.00MB


1. 파일명부터 변경하기

 우선 파일명까지 바꾸기위해 파일명을 어딘가에 백업시켜둡시다. 이때 위에 업로드한 파일중에서 "다중파일 이름백업.c"를 사용해서 파일명을 확장자 포함, 바꿔버렸습니다. 원래 파일명은 입력한 "name.txt"에 저장하게 하였습니다.

 이처럼 파일명은 다른 파일 하나에 백업되어있고, 현재폴더에서는 파일명을 유추할 정보는 전혀없습니다. 반드시 파일명을 담았던 txt를 열어야 원래 파일명을 알 수 있습니다.


2. 본격적인 AES-256암호화 시작

 그 후, "OpenSSL 다중파일 암호화.c"를 실행시켜봅시다. 사용법은 이전 단일파일암호화 프로그램과 거의 비슷해요.

1. 암호화시킬 파일들이 있는 폴더를 입력합니다. 폴더가 정상적으로 확인되면, 해당 폴더의 파일 중 일부를 보여줍니다.

2. Y/N를 입력하여 암호화를 계속할지 결정합니다.

3. 비밀번호의 길이를 지정합니다

4. AES-256암호화 중 모드를 선택합니다.

5. 비밀번호를 모아둘 파일을 만들 경로를 선택합니다.

6. iter횟수를 지정합니다.

그렇게 진행하면, 이런식으로 해당 폴더의 모든 파일들이 암호화되어 있음을 알 수 있습니다.

 이때 파일명을 담은 txt파일 역시 암호화 대상이기에 암호화가 되었습니다. 강제로 열어도 파일이 깨졌기에, 원래 파일이름이 뭐였는지 알 수 없게되었습니다. 이게 정확히는 깨진게 아니라 암호화되어서 알아볼 수 없기에 이렇게 나오는 거에요.

비밀번호를 담아놓은 파일입니다. 이 1kB파일만 유출되지 않는다면, 암호화된 파일만 가지고 절대 원본으로 되돌릴 수 없습니다.


복호화해보기

 진짜 암호화가 잘 되어있는지 복호화해서 확인해봅시다. 일단, 파일 이름부터 알아야하기 때문에, 파일명이 암호화된 "name.txt_enc"먼저 복호화를 시도합시다. password.txt파일을 보니 name.txt_enc파일이 어떤 비밀번호로 암호화되어있는지 적혀 있습니다.

대상파일: C:\Users\RHK\Desktop\ENCRYPT\name.txt_enc
비밀번호: U#OY#jm@QRss/q>wiV7)6bCCB3B5wYWa#Z`sQC$'

그걸 가지고 아래 명령어로 복호화를 진행하였습니다.

openssl enc -d -aes-256-ctr -in "C:\Users\RHK\Desktop\ENCRYPT\name.txt_enc" -out "C:\Users\RHK\Desktop\ENCRYPT\name.txt" -pass pass:"U#OY#jm@QRss/q>wiV7)6bCCB3B5wYWa#Z`sQC$'" -iter 2000 -pbkdf2

(당연히 iter값도 처음에 입력한 2000을 그대로 유지해야합니다.)

 

 복호화가 잘 되어서 name.txt가 열림을 알 수 있습니다.

 

 글을 작성했던 시기가 7월 17일이라 7번째 사진을 복호화해보았습니다. 역시 0007_enc와 그 비밀번호를 가져왔습니다. (파일명을 숫자로 치환할 때, 확장자까지 없애버려서 jpg라는 이름이 붙어있지는 않았습니다.)

대상파일: C:\Users\RHK\Desktop\ENCRYPT\0007_enc
비밀번호: p5VnozFH>4>skyf=kS'fSdb<<T6u{IOXEx(}Wzps

역시 해당 정보를 가지고 아래 명령어로 디코딩을 시도해보았습니다.

openssl enc -d -aes-256-ctr -in "C:\Users\RHK\Desktop\ENCRYPT\0007_enc" -out "C:\Users\RHK\Desktop\ENCRYPT\0007" -pass pass:"p5VnozFH>4>skyf=kS'fSdb<<T6u{IOXEx(}Wzps" -iter 2000 -pbkdf2

일단 "0007"파일이 완성되었어요. 다만 확장자가 손실되어있기에 바로 열 수는 없습니다. 따라서 방금전에 먼저 복호화했던 "name.txt"를 사용해서 원래이름을 붙여줍시다.

 이미 이름을 백업하고 바뀌기 전과 후의 파일명이 다 저장되어있습니다. 현재는 바뀐이름을 바꾸기 전으로 돌려줘야하기에, "name.txt"에서 0007 이 어디있는지를 찾습니다.

바뀌기 전 이름: C:\Users\RHK\Desktop\ENCRYPT\darkmoon_art-constellation-3301804_1920.jpg
바꾼이름: C:\Users\RHK\Desktop\ENCRYPT\0007

파일이 멀정하게 열리는걸 확인할 수 있습니다. 대성공!


본인 컴퓨터의 AES-256 하드웨어 가속성능 벤치마킹하기

 앞서 보셨다시피 이 프로그램은 몇번의 타이핑만으로 OpenSSL을 통해 수많은 파일들을 무작위의 암호로 암호화합니다. 그런데 한가지 문제가 있습니다. 파일들이 너무 크면 어떻게 할까요? 막말로 50GB씩 되는 파일을 6개만 암호화해도 300GB입니다. CPU가 직접 300GB를 연산하는건 너무나도 힘든 일이죠.

 그래서 저희는 AES-256'만' 처리하는 하드웨어를 사용할 것입니다. 사용법은 사실 OpenSSL을 사용하는 시점부터 자동으로 CPU 내부의 AES-256가속기를 사용하게 되어있습니다. 그리고, 거의 대부분의 여러분의 컴퓨터안에도 AES-256가속기가 존재합니다.(무려 그 3000원짜리 ESP32에도 AES-256가속회로가 있어요.) 당연히 가속기마다도 속도 차이가 있을 수 있기에, 여기서는 여러분 컴퓨터의 AES-256가속기의 성능을 체크해보는걸 설명드릴까 합니다.

 

openssl speed -evp aes-256-ctr

끝입니다. 이거 한줄로 확인가능해요. 명령어를 입력하고 가만히 두시면 알아서 성능테스트를 하고 결과를 보여줍니다.

type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes
AES-256-CTR 490300.32k 1688306.54k 4247570.64k 5910049.24k 6638620.65k 6453293.55k

데이터 청크에 따라의 암호화속도입니다. 청크 커질수록 처리속도가 초당 6.6GB까지 올라가는걸 볼 수 있습니다. 이정도속도면 AES-256 하드웨어가속이 잘 되고 있음을 나타냅니다. 물론 16B~64B영역이 많이 낮긴 합니다만, 애초에 사진한장부터도 주로 16kB이상의 청크를 쓰기 때문에, 낮은속도를 체감하기엔 파일크기가 너무 작아 암호화가 이미 끝나있겠지요. 즉, 저장공간의 읽고 쓰기가 이 속도를 따라간다면 매우빠르게 암호화가 된다는걸 알 수 있습니다.

 

cf) 정보보안쪽에 관심있는 분들은 한번쯤은 랜섬웨어(Ransomware)라는 용어를 들어보았을 것입니다. 랜섬웨어는 컴퓨터바이러스의 일종으로 파일을 암호화하고, 파일주인에게 돈을 받아 그 키를 판매하는 악성코드입니다. 이때 랜섬웨어가 파일 암호화방식으로 AES-256을 사용합니다. 일단 알고리즘 자체가 작아요. 이것저것 다 포함된 OpenSSL Light가 5MB밖에 안되니까 AES-256알고리즘 자체는 훨씬 작은거죠. 그리고 강해요. 비밀번호만 확실히 처리하면, 무슨일이 있어도 현존하는 방법으로는 파일을 풀 수 없습니다. 마지막이 빠릅니다. 보셨다시피, 제 컴퓨터에서도 AES-256암호화속도가 6.6GB만 나왔어요. 이러한 속도로 파일 전체가 아니라, 파일 일부분만이라도 암호화해서 못쓰게 하는건 몇초면 끝납니다. 그래서 랜섬웨어가 수천, 수만개의 파일을 암호화시키는거 치고 몇초만에 암호화가 완료되는걸 볼 수 있습니다.

AES-256일고리즘은 여기서 고작 수십 kB입니다. 오픈소스이고. 따라서 바이러스에 임배딩하기 매우 적합하죠.