1+ import os .path
2+ import string
3+ import random
4+ import pickle
5+
6+ def print_menu ():
7+ print ()
8+ print ("암호화/복호화 프로그램입니다 ^o^" )
9+ print ("1. 암호화" )
10+ print ("2. 복호화" )
11+ print ("3. 종료" )
12+ print ()
13+
14+ def record_file_in_check (f ):
15+ record = []
16+ if not os .path .isfile ("record.txt" ):
17+ with open ("record.txt" , "w" , encoding = "utf8" ):
18+ pass
19+ return False
20+ with open ("record.txt" , "r" , encoding = "utf8" ) as file :
21+ record = file .read ()
22+ if record .find (f ) == - 1 :
23+ return False
24+ else :
25+ return True
26+
27+ while True :
28+ print_menu ()
29+ m = input ("원하시는 기능을 선택하세요: " )
30+
31+ if m == "1" :
32+ f = input ("암호화를 할 파일 이름을 입력하세요: " )
33+ if not os .path .isfile (f ):
34+ print ("파일이 존재하지 않습니다." )
35+ continue
36+
37+ test = record_file_in_check (f )
38+ if test :
39+ print ("이미 암호화가 완료된 파일입니다." )
40+ continue
41+
42+ enc_key = string .ascii_letters + string .digits
43+ t = list (enc_key )
44+ random .shuffle (t )
45+ enc_value = "" .join (t )
46+
47+ keylist = {}
48+ for i in range (len (enc_key )):
49+ keylist [enc_key [i ]] = enc_value [i ]
50+
51+ f2 = f [:f .index ('.' )]+ ".pwd"
52+ with open (f2 , "wb" ) as _f :
53+ pickle .dump (keylist , _f , pickle .HIGHEST_PROTOCOL )
54+
55+ src_data = ""
56+ with open (f , "r" , encoding = "utf8" ) as _f :
57+ src_data = _f .read ()
58+
59+ enc_data = ""
60+ for i in src_data :
61+ if i in keylist :
62+ enc_data += keylist [i ]
63+ else :
64+ enc_data += i
65+
66+ with open (f , "w" , encoding = "utf8" ) as _f :
67+ _f .write (enc_data )
68+
69+ with open ("record.txt" , "a" , encoding = "utf8" ) as _f :
70+ _f .write (f + "\n " )
71+
72+ print ("암호화를 완료했습니다." )
73+
74+ elif m == "2" :
75+ f = input ("복호화를 할 파일 이름을 입력하세요: " )
76+ if not os .path .isfile (f ):
77+ print ("파일이 존재하지 않습니다." )
78+ continue
79+
80+ test = record_file_in_check (f )
81+ if not test :
82+ print ("암호화 되지 않은 파일입니다." )
83+ continue
84+
85+ f2 = f [:f .index ('.' )]+ ".pwd"
86+
87+ keylist = {}
88+ keyreverse = {}
89+ with open (f2 , "rb" ) as _f :
90+ keylist = pickle .load (_f )
91+
92+ for i in keylist :
93+ _v = keylist [i ]
94+ keyreverse [_v ] = i
95+
96+ enc_data = ""
97+ with open (f , "r" , encoding = "utf8" ) as _f :
98+ enc_data = _f .read ()
99+
100+ src_data = ""
101+ for i in enc_data :
102+ if i in keyreverse :
103+ src_data += keyreverse [i ]
104+ else :
105+ src_data += i
106+
107+ with open (f , "w" , encoding = "utf8" ) as _f :
108+ _f .write (src_data )
109+
110+ print ("복호화를 완료했습니다." )
111+
112+ elif m == "3" :
113+ break
114+
115+ else :
116+ print ("잘못된 입력입니다." )
117+ continue
0 commit comments