Skip to content

Commit 02c127b

Browse files
authored
암호화 복호화 예제
암호화에 사용된 키&값을 딕셔너리에 저장하고, 이 딕셔너리를 피클을 사용해서 파일에 저장한다. 복호화는 피클로 저장된 딕셔너리를 읽어와서 키&값 순서를 변경해서 복호화를 진행한다.
1 parent 95f7ce5 commit 02c127b

File tree

1 file changed

+117
-0
lines changed

1 file changed

+117
-0
lines changed

enc_dec_example.py

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
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

Comments
 (0)