# 카이사르 암호화
# 영어 문자(ASCHII 65~90, 97~122)의 경우에만 문자열 Shift 진행
def encryption(Key):
Sub = open("Caesar.txt",'r') # 텍스트 파일 열기
LineRead = Sub.readlines() # 리스트로 모든 줄 읽기
ExStr = [0] * len(LineRead) # 리스트의 len(몇줄인지 알아냄)
for i in range (0,len(LineRead)-1):
a = LineRead[i] # 각줄마다 작용
ExStr[i] = a[0:len(a)-1] # 맨 마지막 \n문자 지워서 ExStr에 대입
ExStr[len(LineRead)-1] = LineRead[len(LineRead)-1]
Sub.close()
Wri = open("Encrypted.txt","w") # 작성을 위한 파일 열기
EachStr = [0] * len(LineRead) # 문자 하나하나를 저장하기 위함
for j in range(0,len(LineRead)): # 문자 하나하나 / 각 줄을 저장하는 리스트 만들기
EachStr[j] = list(ExStr[j])
print(EachStr)
Ord = []
for ii in range(0,len(LineRead)): # Ord정보 저장할 빈 이차원배열
OLine = []
for jj in range(0,len(EachStr[ii])):
OLine.append(0)
Ord.append(OLine)
print(Ord)
for k in range(0,len(LineRead)): # 빈 이차원배열 Ord에 EachStr의 Ord값을 집어넣음
for l in range(0,len(EachStr[k])):
Ord[k][l] = ord(EachStr[k][l])
print(Ord)
Conc = []
for ii in range(0,len(LineRead)): # 최종정보 저장할 이차원배열
Temp = []
for jj in range(0,len(EachStr[ii])):
Temp.append('1')
Conc.append(OLine)
for l in range(0,len(LineRead)): # 암호화 과정
for m in range(0,len(Ord[l])):
if 65 <= int(Ord[l][m]) <= 90:
Conc[l][m] = chr((Ord[l][m] - 65 + Key) % 26 + 65)
elif 97 <= Ord[l][m] <= 122:
Conc[l][m] = chr((Ord[l][m] - 97 + Key) % 26 + 97)
#else:
# Conc[l][m] = chr(Ord[l][m])
Fin = [] # 최종결과를 각줄로 저장
for n in range(0,len(LineRead)):
d = ""
for o in range(0,Conc[n]):
d += Conc[n][o]
Fin[n] = d
for p in range(0,len(LineRead)): # 각줄마다 출력
Wri.write(Conc[p])
print("파일의 카이사르 암호화/복호화 프로그램입니다. 해당 경로에 'Caesar.txt' 파일이 필요합니다.")
EorD = input("암호화(0), 복호화(1) 중 옵션을 선택하세요:")
if EorD == '0':
Key = int(input("암호화를 위한 Key값을 입력해주세요:"))
encryption((Key))
elif EorD == '1':
Key = int(input("복호화를 위한 Key값을 입력해주세요:"))
# 영어 문자(ASCHII 65~90, 97~122)의 경우에만 문자열 Shift 진행
def encryption(key):
n = len(S)
P = list(S)
aP = [0] * n
Enct = [0] * n
Enc = [0] * n
for i in range(0,n):
aP[i] = ord(P[i])
for j in range(0,n):
if 65 <= aP[j] <= 90:
Enct[j] = (aP[j] - 65 + key) % 26 + 65
elif 97 <= aP[j] <= 122:
Enct[j] = (aP[j] - 97 + key) % 26 + 97
else:
Enct[j] = aP[j]
for k in range(0,n):
Enc[k] = chr(Enct[k])
print(Enc[k],end='')
print()
print()
def decryption(key):
n = len(S)
P = list(S)
aP = [0] * n
Dect = [0] * n
Dec = [0] * n
for i in range(0,n):
aP[i] = ord(P[i])
for j in range(0,n):
if 65 <= aP[j] <= 90:
Dect[j] = (aP[j] - 65 - key) % 26 + 65
elif 97 <= aP[j] <= 122:
Dect[j] = (aP[j] - 97 - Key) % 26 + 97
else:
Dect[j] = aP[j]
for k in range(0,n):
Dec[k] = chr(Dect[k])
print(Dec[k],end='')
print()
print()
while True:
EorD = input("암호화(0), 복호화(1) 중 옵션을 선택하세요:")
if EorD == '0':
S = input("암호화할 문장을 입력해주세요:")
Key = int(input("암호화를 위한 Key값을 입력해주세요:"))
encryption(Key)
else:
S = input("복호화할 문장을 입력해주세요:")
Key = int(input("복호화를 위한 Key값을 입력해주세요:"))
decryption(Key)
# 영어 문자(ASCHII 65~90, 97~122)의 경우에만 문자열 Shift 진행
def encryption(Key):
Sub = open("Caesar.txt",'r') # 텍스트 파일 열기
LineRead = Sub.readlines() # 리스트로 모든 줄 읽기
ExStr = [0] * len(LineRead) # 리스트의 len(몇줄인지 알아냄)
for i in range (0,len(LineRead)-1):
a = LineRead[i] # 각줄마다 작용
ExStr[i] = a[0:len(a)-1] # 맨 마지막 \n문자 지워서 ExStr에 대입
ExStr[len(LineRead)-1] = LineRead[len(LineRead)-1]
Sub.close()
Wri = open("Encrypted.txt","w") # 작성을 위한 파일 열기
EachStr = [0] * len(LineRead) # 문자 하나하나를 저장하기 위함
for j in range(0,len(LineRead)): # 문자 하나하나 / 각 줄을 저장하는 리스트 만들기
EachStr[j] = list(ExStr[j])
print(EachStr)
Ord = []
for ii in range(0,len(LineRead)): # Ord정보 저장할 빈 이차원배열
OLine = []
for jj in range(0,len(EachStr[ii])):
OLine.append(0)
Ord.append(OLine)
print(Ord)
for k in range(0,len(LineRead)): # 빈 이차원배열 Ord에 EachStr의 Ord값을 집어넣음
for l in range(0,len(EachStr[k])):
Ord[k][l] = ord(EachStr[k][l])
print(Ord)
Conc = []
for ii in range(0,len(LineRead)): # 최종정보 저장할 이차원배열
Temp = []
for jj in range(0,len(EachStr[ii])):
Temp.append('1')
Conc.append(OLine)
for l in range(0,len(LineRead)): # 암호화 과정
for m in range(0,len(Ord[l])):
if 65 <= int(Ord[l][m]) <= 90:
Conc[l][m] = chr((Ord[l][m] - 65 + Key) % 26 + 65)
elif 97 <= Ord[l][m] <= 122:
Conc[l][m] = chr((Ord[l][m] - 97 + Key) % 26 + 97)
#else:
# Conc[l][m] = chr(Ord[l][m])
Fin = [] # 최종결과를 각줄로 저장
for n in range(0,len(LineRead)):
d = ""
for o in range(0,Conc[n]):
d += Conc[n][o]
Fin[n] = d
for p in range(0,len(LineRead)): # 각줄마다 출력
Wri.write(Conc[p])
print("파일의 카이사르 암호화/복호화 프로그램입니다. 해당 경로에 'Caesar.txt' 파일이 필요합니다.")
EorD = input("암호화(0), 복호화(1) 중 옵션을 선택하세요:")
if EorD == '0':
Key = int(input("암호화를 위한 Key값을 입력해주세요:"))
encryption((Key))
elif EorD == '1':
Key = int(input("복호화를 위한 Key값을 입력해주세요:"))
--------------------------------------------------------------------------
이 위에거 돌려보면 50번째줄에서 오류뜨는데 왜그런지 모르겠어요
ord()는 아스키코드를 int로 반환하는거 아닌가요..?
비슷한 코드인 아래거는 또 정상적으로 되요
---------------------------------------------------------------------------
# 카이사르 암호화# 영어 문자(ASCHII 65~90, 97~122)의 경우에만 문자열 Shift 진행
def encryption(key):
n = len(S)
P = list(S)
aP = [0] * n
Enct = [0] * n
Enc = [0] * n
for i in range(0,n):
aP[i] = ord(P[i])
for j in range(0,n):
if 65 <= aP[j] <= 90:
Enct[j] = (aP[j] - 65 + key) % 26 + 65
elif 97 <= aP[j] <= 122:
Enct[j] = (aP[j] - 97 + key) % 26 + 97
else:
Enct[j] = aP[j]
for k in range(0,n):
Enc[k] = chr(Enct[k])
print(Enc[k],end='')
print()
print()
def decryption(key):
n = len(S)
P = list(S)
aP = [0] * n
Dect = [0] * n
Dec = [0] * n
for i in range(0,n):
aP[i] = ord(P[i])
for j in range(0,n):
if 65 <= aP[j] <= 90:
Dect[j] = (aP[j] - 65 - key) % 26 + 65
elif 97 <= aP[j] <= 122:
Dect[j] = (aP[j] - 97 - Key) % 26 + 97
else:
Dect[j] = aP[j]
for k in range(0,n):
Dec[k] = chr(Dect[k])
print(Dec[k],end='')
print()
print()
while True:
EorD = input("암호화(0), 복호화(1) 중 옵션을 선택하세요:")
if EorD == '0':
S = input("암호화할 문장을 입력해주세요:")
Key = int(input("암호화를 위한 Key값을 입력해주세요:"))
encryption(Key)
else:
S = input("복호화할 문장을 입력해주세요:")
Key = int(input("복호화를 위한 Key값을 입력해주세요:"))
decryption(Key)
아카이브: https://archive.is/Vyftq
ㅋㅋ