사용하지않는공간/Python
[Python] 원타임패드, 일회성패드 ( One-Time Pad ) 암호화/복호화 만들기
반나무
2020. 10. 6. 15:49
암호화 프로그램
import random
import string
word = input("평문을 입력하세요 : ")
password_b = [] # 평문 -> 이진화
string_pool = string.ascii_uppercase # 키 리스트 생성
password_s = [] # 이진화 -> 암호문
key = [] # 연산용 키 리스트 초기화
keyorigin = [] # 키 리스트 오리진
ch = '' # 문자 하나 따오기
ac = 0 # ASCII code로 변환
####################
print("입력한 평문은 [%s] 입니다. > 암호화를 진행하겠습니다." %word )
# 평문 -> 이진화
for i in range(len(word)):
ch = word[i] # 개별 문자 받기
ac = ord(ch) # 문자 -> 아스키코드 변환
bi = bin(ac) # 아스키코드 -> 바이너리 변환
password_b.append(bi) # 리스트 추가
# 키 -> 이진화
for i in range(len(word)):
#ch = ran_key[i]
ch = random.choice(string_pool) # 개별 문자 받기
ac = ord(ch) # 문자 -> 아스키코드 변환
bi = bin(ac) # 아스키코드 -> 바이너리 변환
keyorigin.append(ch) # 출력할 키 추가
key.append(bi) # 리스트 추가
# 암호화
for i in range(len(password_b)):
code1 = int(password_b[i],2) # 이진화된 평문을 연산하기위해 정수형 변환
code2 = int(key[i],2) # 이진화된 키를 연산하기위해 정수형 변환
password_s.append(chr((code1^code2))) # 평문과 키 XOR연산
# 키, 암호문 출력
print("키 : %s" % ''.join(keyorigin))
print("암호문 : %s" %''.join(password_s))
복호화 프로그램
import random
import string
word = input("암호문을 입력하세요 : ")
keyin = input("키를 입력하세요")
password_b = [] # 암호문 -> 이진화
password_s = [] # 이진화 -> 평문
key = [] # 키 리스트 초기화
ch = '' # 문자 하나 따오기
ac = 0 # ASCII code로 변환
##############################################
print("입력한 암호문은 [%s] 입니다. > 복호화를 진행하겠습니다." %word )
# 암호문 -> 이진화
for i in range(len(word)):
ch = word[i] # 개별 문자 받기
ac = ord(ch) # 문자 -> 아스키코드 변환
bi = bin(ac) # 아스키코드 -> 바이너리 변환
password_b.append(bi) # 리스트 추가
# 키 -> 이진화
for i in range(len(word)):
ch = keyin[i] # 개별 문자 받기
ac = ord(ch) # 문자 -> 아스키코드 변환
bi = bin(ac) # 아스키코드 -> 바이너리 변환
key.append(bi) # 리스트 추가
# 복호화
for i in range(len(password_b)):
code1 = int(password_b[i],2) # 이진화된 암호문을 연산하기위해 정수형 변환
code2 = int(key[i],2) # 이진화된 키를 연산하기위해 정수형 변환
password_s.append(chr((code1^code2))) # 암호문과 키 XOR연산
# 평문 출력
print("평문 : %s" %''.join(password_s))
반응형