Python 컴퓨터 보안 팀 프로젝트
AesRSA 대칭키, 그리고 스테가노그래피를 이용해 그림의 색조 변화를 통해 암호문을 숨기는 보안 프로그램을 개발했다.
처음에 아이디어를 내고 기획하고 모두 동등하게 참여했다.
사용 언어는 Python이고 Spyder와 Qtdesigner라는 툴을 사용해서 만들었다.
다른 팀원들은 Python 기본 툴로 만들었지만 나는 GUI와 파일 입출력, 에러 페이지, 메인소스를 만들고 디자인했기 때문에 Spyder와 Qtdesigner라는 툴을 사용할 수 밖에 없었고, 관련 문서가 별로 없었기 때문에 해외소스를 찾아서 혼자 배웠다.
나중에 팀원들에게 모듈의 에러를 수정하고 통합해 완성본을 전달하고, 툴의 사용법을 팀원들에게 알려줄 때 정말 보람있었다.
컴퓨터 보안 시간에 발표한 내용들을 보면 우리 팀이 가장 완성도 있었고, 프로그램을 아예 안만들고 대충 기획만 한 팀들도 있었고, 우리만 프로그램 자체를 만들어서 제출하고 발표했는데 어찌된 일인지 B가 나와서 속상했었다.
중간에 여행을 가기는 했지만 출석일수와 과제, 프로그램, 시험에 지장이 없었고 우리 팀원들에게 얘기해서 남들보다 2주 먼저 프로그램을 완성하고 가서 문제될 것이 없었다.
팀원 세명이고 모두들 맡은바 열심히 했던 기억이 있다.
프로젝트를 맡았을때 팀원들에게 배제당하거나 아이디어를 내도 무시당하거나 그런 경험이 다들 한두번씩 있을 것이다.
나도 그런 일들을 경험했고, 그래서 학교를 다니며 했던 많은 프로젝트들 중에서 가장 친했던 친구들과 했던 프로젝트 2개를 보고서와 기획단계에서 멈췄던 기억이 있다.
오히려 처음 만났던 사람들과 서로를 존중하며 아이디어를 내고 열심히 했던 것이 기억에 남는다.
이 프로젝트도 그런 좋은 기억이 남아있는 프로젝트다.
파일 가져오기 페이지다.
비트맵 이미지와 대칭키, 숨기고 싶은 메시지를 txt 파일로 가져온다.
Input 파일이 형식에 맞지 않거나 오류가 생기면 Check The Input 에러메시지를 뜨게 했고, 밑에 사진은 에러시 뜨는 Nope이라는 파일이다.
성공시 암호문이 들어간 파일 이미지의 미리보기가 뜨고 Encrytion Successed 라는 페이지가 뜬다.
암호문을 해독하고, 숨겨진 메시지를 이미지파일에서 찾는 방법도 이와 같게 만들었다.
AES 대칭키이기 때문에 이 비밀번호와 이미지파일을 넣으면 프로그램에서 자동으로 메시지를 추출해 파일로 저장한다.
사진은 생략하겠다.
우리 팀원이 만든 파일에 숨기는 소스를 내가 수정한 것. 툴의 호환성과 조금 틀린부분 수정했다.
팀원이 전달한 암호화 모듈의 일부이다. 키를 통해 암호화를 하고, 풀 수 있다. 이것도 내가 수정했다.
내가 작성한 코드들이다. 코드 통합과 모듈을 가져와서 실행시키고, 프로그램 실행을 작성했다. GUI로 Python으로 간단한 프로그램 외부 디자인도 했다.
우리 팀원이 전달한 암호화 복호화 모듈에 있었던 문제이다.
처음에 내게 전달했을 때 콘솔에 결과가 출력되게 해놨다.
통합하는 사람은 수정도 겸해야 했기에 문제되는 부분을 찾았다.
Anaconda3를 사용할 때 호환성 문제가 있었다.
한참 찾아보다 해외자료에서 라이브러리를 바꿔야 한다는 것을 알아냈다.
이후 Anaconda와 해당 환경을 다른 팀원들의 컴퓨터에 깔아주고 설명을 했다.
하지만 콘솔에 출력하는 것은 확인용이고 프로그램에서 파일로 복호화된 메시지를 파일 위치를 지정해 저장해야 하는 것이 목표 였다.
내가 메인 소스를 짜며 만들어진 파일을 지정한 주소에 저장을 하는데 자꾸 이상한 파일이 저장되었다.
그래서 이 복호화 전에 그림에서 추출한 암호화 문장을 콘솔에 실행해 봤다.
무언가 복호화 시키기 위해 파일을 불러오는 것에 문제가 있는 모듈이라는 걸 깨달았다.
사용자가 사진 파일을 가져왔을 때 그 주소에서 파일이 전달되어야 하는데, 이미 복호화 될 파일 안에 파일주소를 같이 넣어놓은 것이다.
그래서 실행할 때도 복호화 시켰을 때도 주소까지 포함되어 이상한 문자가 나오는 것이었다.
이 주소를 우선 제거해줬다.
파일 내용이 정상적으로 저장 되는 것을 확인하고, 파일이 저장된 루트를 설정하고 tmp로 변수를 만들어 문서를 열었다.
잘 되었당.
암호화 부분은 수정하는 과정에서 팀원이 복호화랑 똑같이 가져온 dirname()으로 고쳐놔서 내가 다시 basename()로 고쳐서 코드가 정상 작동 했다.
형광펜으로 친 dedata도 출력되게 해놔서 내가 global변수 어쩌구 헛소리를 했지만 그냥 레퍼런스 할당 전에 사용되는 문제로 지워주고 값을 return 해 주었다.
수정을 모두 하고 내가 만든 메인과 통합해서 프로그램의 GUI와 잘 작동하는지 알아봤고, 잘 작동이 되었다.
하지만 프로그램의 완성도를 위해 조금 더 추가하고 싶었다.
try -except 문을 이용했다.
잘못된 Input이나 파일을 넣었을 때 사용자의 편의성을 위해 에러 메시지 박스를 넣었고, 제대로 실행이 되어 output이 나오고, 사용자에게 그것을 알려주기 위해서 사진 미리보기 기능과 성공 메시지 박스를 넣었다.