[Python] 원타임패드, 일회성패드 ( One-Time Pad ) 암호화/복호화 만들기사용하지않는공간/Python2020. 10. 6. 15:49
Table of Contents
암호화 프로그램
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))
반응형
'사용하지않는공간 > Python' 카테고리의 다른 글
[머신러닝] K-최근접 이웃(KNN; K-Nearest Neighbor) 분류 (0) | 2021.04.07 |
---|---|
[Numpy] 수학용어 (0) | 2021.02.14 |
[python] 파이썬 예제 ( 람다함수 ) (0) | 2020.08.07 |
[python] 파이썬 예제 (CSS_Selector, list Comprehension, 이차원리스트) (0) | 2020.08.06 |
[python] 리스트를 사용한 다양한 파이썬 예제(카이사르 암호 해독, 생성) (0) | 2020.08.06 |
@반나무 :: 반나무_뿌리
3년차 WPF 개발자입니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!