암호화 / 복호화
def xor_enc(msg, key):
msg_size=len(msg) # msg 의 길이
key_size=len(key) # key 의 길이
ans=bytearray()
for i in range(msg_size):
v = msg[i] ^ key[i%key_size] # msg와 key 를 1 바이트씩 xor하여 저장
ans.append(v)
return ans # 저장된 내용을 리턴
def main():
msg="안녕하세요"
key="10"
print("원문:", msg)
msg_enc=xor_enc(msg.encode(), key.encode())
print("암호문:", msg_enc)
msg_dec=xor_enc(msg_enc, key.encode()) # 복호화는 암호화와 같이 key와 xor연산
print("해독문:", msg_dec.decode())
main()
공격(key 구하기)
# key는 두 자리이고 0, 1로 구성되어 있다.
def my_xor(msg_enc, key):
msg_size = len(msg_enc)
key_size = len(key)
ans = bytearray()
for i in range(msg_size):
v = msg_enc[i] ^ key[i%key_size]
ans.append(v)
return ans
def attack():
msg_enc = b'암호문'
key=['00','01', '10', '11']
key_size=len(key)
for i in range(key_size):
k = key[i]
msg_dec = my_xor(msg_enc, k.encode())
print(k, msg_dec)
attack()