본문 바로가기
Python

3DES로 파일 암호화 하기.

by 웹하는빡통 2020. 4. 26.

3DES를 이용하여 텍스트 파일을 읽어 모든 내용을 암호화하고 이를 파일로 저장하는 코드를 구현 해보자. 

 

전체 소스코드. 

 

 

 

상세 코드 설명

makeEncInfo(self, filename)은 filename으로 지정된 파일 크기를 구하고 파일 크기가 8바이트 배수가 아닐 경우 8바이트 배수로 만들기 위해 추가할 '0' 문자열  구성한다. 그리고 추가할 문자 '0'의 개수에 대한 정보를 헤더로 만들고 헤더, 그리고 추가할 '0' 문자열을 리턴한다. 

 

 

암호화 로직 소스코드 분석. 

enc(self,filename)은 filename으로 지정된 파일 내용을 1KB씩 읽어서 3DES로 암호화 한 후에 새로운 파일을 저장한다.

암호화 된 내용을 저정할 파일 이름은 .TXT파일을 지정에 .TXT 확장자 뒤에 .enc 확장자를 추가하여 만든다. 

self.makeEncInfo(filename)을 호출하여 헤더와 '0' 문자열을 얻고 각각 변수 header 와 filler에 담는다. 

 

암호화 하려는 파일읽기모드로 오픈하여 fileopen변수에 지정해주고

암호화 된 파일 내용을 저장하기 위한 파일을 쓰기모드로 오픈하여 fileopen2변수에 지정해준다.  

 

파일에서 1KB만큼 읽어서 content에 담아준다. 그리고 header를 content 앞에 추가해준다. 

만약 파일 내용이 1KB 미만이면 file.read()는 남아 있는 크기만큼 모두 읽는다. 

content에 내용이 없을 때까지 while 구문을 돌려주고

만약 content의 크기가 KSIZE, 즉 1KB보다 작으면 파일의 끝까지 읽었다는 의미이다. 

따라서 이 부분에서 '0' 문자열을 content에 추가한다. 

content를 3DES로 암호화하고 파일에 저정한 후, 파일에서 다시 1KB만큼 읽어 content에 담는다. 

 

 

복호화 로직 소스코드 분석. 

dec(self,encfilename)은 encfilename으로 지정된 암호화된 파일 내용을 1KB씩 읽어서 3DES로 복호화 한 후 새로운 파일에 저장한다. 

 

 

 

 

 

복호화 된 내용을 저정할 파일을 쓰기모드로 열고 그리고 암호화 된 파일을 읽기 모드로 열어준다. 

 

암호화 파일에서 최초 8바이트를 읽어 3DES로 복호화 한다. 최초 8바이트는 header이므로 '#'을 구분자로 헤더를 분리한 후 첫 번째 멤버를 정수로 변환하면 이 파일의 끝부분에 추가된 문자 '0'의 개수가 얻어진다. 

 

암호화 파일에서 1KB를 먼저 읽고 content에 담은 후, while 구문으로 진입한다.

while 구문은 content에 내용이 없을 때까지 수행하는데

content를 3DES로 복호화 하고 파일에 저장한다. 만야 복호화 한 결과가 1KB보다 작으면 복호화 파일의 마지막 부분이므로 암호화 때 추가한 '0' 문자열을 제거하고 파일에 저장한다. 

 

실행 결과. 

 

 

 

 

일단 코드를 실행하면 plain.txt.enc와 .enc.dec 두 개의 파일이 생성된다. 

plain.txt.enc은 plain 파일을 암호화한 파일이고, . enc.dec파일은 plain.txt.enc을 복호화 한 파일이다.

 

 

 

 

댓글