728x90
반응형

파이썬으로 게임만들기 제6장 3번 암호화
책에 있는 예제인데 주석을 달아서 어떻게 계산되는지 체크해놈
파이썬마스터하기 어렵넹 ㅠㅠ
06장 비밀 코드 풀기
06-1 리스트란?
>>>>>>>>>>>2023.04.27 - [python/파이썬으로게임만들기] - 파이썬게임만들기 -6장비밀코드풀기-1.리스트
06-2 루프 안 루프 알아보기
>>>>>>>>>>>2023.04.28 - [분류 전체보기] - 파이썬게임만들기-제6장비밀코드풀기-2.루프
06-3 암호 해독 프로그램 만들기
기본설명
#암호화
print(ord('A')) #아스키코드 > 65
print(ord('A')+1) #아스키코드 > 66 = B
print(chr(65))
print(chr(ord('A')+1))
#A(65) B(66) C(67) D(68) E(69) F(70) G(71) H(72) I(73) J(74) K(75)
#L(76) M(77) N(78) O(79) P(80) Q(81) R(82) S(83) T(84) U(85) V(86)
#W(87) X(88) Y(89) Z(90) 공백(32)
print()
#HELLO에 10을 더하면? ROVVY
print(ord('H'),ord('E'),ord('L'),ord('L'),ord('O'))
print(chr(ord('H')+10),chr(ord('E')+10),chr(ord('L')+10),chr(ord('L')+10),chr(ord('O')+10))
print()
#암호화 키=314159 로 헬로우를암호화 ,만약 키보다 문자열이 길면 키를 반복
print(chr(ord('H')+3),chr(ord('E')+1),chr(ord('L')+4),chr(ord('L')+1),chr(ord('O')+5))
암호화 코드 만들기
#암호화코드만들기
#아스키범위
asciimin = 32 #공백
asciimax = 126 #'~'
#암호화키
key = 314159
key = str(key) #--> 각문자에 접근할수 있도록 key값을 문자로 변환
#암호화할 메세지 입력받기 ex>암호화할문자를입력하세요:HELLO
message = input("암호화할문자를입력하세요:")
#암호화메세지용 변수 초기화하기
messEncr = ""
#메세지루프
for index in range(0,len(message)):
#해당문자의 아스키값 가져오기
char = ord(message[index])
#print(char) #72 <HELLO의 아스키값
#69
#76
#76
#79
if char < asciimin or char > asciimax: # 메세지가 아스키범위에 없다면
messEncr += message[index] #암호화에 적당하지않음 message값 그대로두기
else:
ascNum = char + int(key[index % len(key)])
#len(key) = 6, INDEX RANGE (0~4)
#index % len(key) -> 0 % 6 = 0
# 1 % 6 = 1
# 2 % 6 = 2
# 3 % 6 = 3
# 4 % 6 = 4
#char + int(key[index % len(key)]) -> 72 + key[0] = 72 + 3 = 75
# 69 + key[1] = 72 + 1 = 73
# 76 + key[2] = 72 + 4 = 76
# 76 + key[3] = 72 + 1 = 73
# 79 + key[4] = 72 + 5 = 77
if ascNum > asciimax: #암호화된 문자(ascNum)가 126의 ASCII 범위 내에 있는지 확인하는 데 사용
#최대 ASCII 값인 126보다 ascNum보다 크면
ascNum -= (asciimax - asciimin) # ascNum = ascNum - (asciimax - asciimin)
# ASCII 범위( asciimax - asciimin) 간의 차이를 뺌
# 이렇게 하면 값이 ASCII 범위 내로 돌아감
messEncr = messEncr + chr(ascNum) #chr(ascNum) 의 루프가 입력 메시지의 각 문자를 반복
#messEncr , messEncr + chr(ascNum)->> K
# K KF
# KF KFP
# KFP KFPM
# KFPM KFPMT
# KFPMT <<< messEncr결과값
print ("암호화한메세지:", messEncr)
#결과 >>>>암호화한메세지: KFPMT
복호화 코드 만들기
#복호화코드만들기
asciimin = 32 #공백
asciimax = 126 #'~'
#암호화키
key = 314159
key = str(key) #--> 각문자에 접근할수 있도록 key값을 문자로 변환
#복호화할 메세지 입력받기 ex>복호화할문자를입력하세요:KFPMT
message = input("복호화할문자를입력하세요:")
messEncr = ""
#메세지루프
for index in range(0,len(message)):
#해당문자의 아스키값 가져오기
char = ord(message[index])
#print(char) #75 <KFPMT의 아스키값
#70
#80
#77
#84
if char < asciimin or char > asciimax: # 메세지가 아스키범위에 없다면
messEncr += message[index] #복호화에 적당하지않음 message값 그대로두기
else:
ascNum = char - int(key[index % len(key)])
#len(key) = 6, INDEX RANGE (0~4)
#index % len(key) -> 0 % 6 = 0
# 1 % 6 = 1
# 2 % 6 = 2
# 3 % 6 = 3
# 4 % 6 = 4
#char - int(key[index % len(key)]) -> 75 - key[0] = 75 - 3 = 72
# 70 - key[1] = 70 - 1 = 69
# 80 - key[2] = 80 - 4 = 76
# 77 - key[3] = 77 - 1 = 76
# 84 - key[4] = 84 - 5 = 79
if ascNum < asciimin: #최소 ASCII 값인 32보다 ascNum보다 작으면
ascNum += (asciimax - asciimin) # ascNum = ascNum + (asciimax - asciimin)
# ASCII 범위( asciimax - asciimin) 간의 차이를 더함
# 이렇게 하면 값이 ASCII 범위 내로 돌아감
messEncr = messEncr + chr(ascNum) #chr(ascNum) 의 루프가 입력 메시지의 각 문자를 반복
#messEncr , messEncr + chr(ascNum)->> H
# H HE
# HE HEL
# HEL HELL
# HELL HELLO <<< messEncr결과값
print ("복호화한메세지:", messEncr)
암호화 복호화 합치기 (들여쓰기 주의)
#암호화 복호화 합치기
asciimin = 32 #공백
asciimax = 126 #'~'
#키값
key = 314159
key = str(key)
action = input("암호화(E) 또는 복호화(D) 중 선택하세요 : ").upper().strip()
if action == "E" or action == "암호화":
message = input("암호화할문자를입력하세요:")
messEncr = ""
for index in range(0,len(message)):
char = ord(message[index])
if char < asciimin or char > asciimax:
messEncr += message[index]
else:
ascNum = char + int(key[index % len(key)])
if ascNum > asciimax:
ascNum -= (asciimax - asciimin)
messEncr = messEncr + chr(ascNum)
print ("암호화한메세지:", messEncr)
if action == "D" or action == "복호화":
message = input("복호화할문자를입력하세요:")
messEncr = ""
for index in range(0,len(message)):
char = ord(message[index])
if char < asciimin or char > asciimax:
messEncr += message[index]
else:
ascNum = char - int(key[index % len(key)])
if ascNum < asciimin:
ascNum += (asciimax - asciimin)
messEncr = messEncr + chr(ascNum)
print ("복호화한메세지:", messEncr)
728x90
반응형
'python > 파이썬으로게임만들기' 카테고리의 다른 글
파이썬게임만들기-제7장숫자맞추기게임-2.숫자맞추기게임!! (0) | 2023.05.02 |
---|---|
파이썬게임만들기-제7장숫자맞추기게임-1.조건루프 (0) | 2023.04.29 |
파이썬게임만들기-제6장비밀코드풀기-2.루프 (0) | 2023.04.28 |
파이썬게임만들기 -6장비밀코드풀기-1.리스트 (0) | 2023.04.27 |
파이썬게임만들기 -가위,바위,보 (0) | 2023.04.27 |