1. XOR 연산
XOR 연산은 두 입력값이 서로 다를 때 1을 반환하고, 같을 때 0을 반환한다.
2. 암호화
평문 == P
키 == K
암호문 == C 가 있다고 하자
i 는 각 bit를 의미한다.
그렇다면 P_i ^ K_i = C_i 이다.
3. 복호화
암호화와 같은 구성이라고 하자
그렇다면 C_i ^ K_i = P_i 가 성립된다.
def xor_encrypt_decrypt(input_string, key_string):
# 입력 문자열과 키를 바이트 배열로 변환
input_bytes = bytes.fromhex(input_string)
key_bytes = bytes.fromhex(key_string)
# 암호화 또는 복호화된 결과를 저장할 바이트 배열
result = bytearray()
# 입력 바이트와 키를 XOR 연산
for i in range(len(input_bytes)):
# 키를 반복 사용
key_byte = key_bytes[i % len(key_bytes)]
result_byte = input_bytes[i] ^ key_byte
result.append(result_byte)
# 16진수 문자열로 결과 반환
return result.hex()
# 예시 사용
input_string = "4a6f686e20446f65"
key_string = "deadbeef"
# 암호화
encrypted = xor_encrypt_decrypt(input_string, key_string)
print(f"Encrypted: {encrypted}")
# 복호화
decrypted = xor_encrypt_decrypt(encrypted, key_string)
print(f"Decrypted: {decrypted}")
파이썬 코드로 증명 해보았다.
참고 문헌
https://blog.naver.com/kkson50/220479095688