-
Notifications
You must be signed in to change notification settings - Fork 0
/
XOR_Cipher.py
68 lines (50 loc) · 1.27 KB
/
XOR_Cipher.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# XOR Entryption
import random
def string_to_bytes(input):
input = bytearray(input, 'utf-8')
result = ""
for byte in input:
for i in range(7, -1, -1):
result += str((byte >> i) & 1)
return result
def bytes_to_string(input):
result = ""
for idx in range(0, int(len(input)/8)):
binary = input[8*idx:8*(idx+1)]
result += chr(int(binary, 2))
return result
def generate_key(length):
key = ""
for i in range(0, length):
key += str(random.randint(0, 1))
return key
def xor_operation(text, key):
if text == key:
return "0"
else:
return "1"
def xor_en_decrypt(text, key):
result = ""
len_txt = len(text)
len_key = len(key)
for idx in range(0, len_txt):
if idx >= len_key:
key_idx = idx % len_key
else:
key_idx = idx
xor_result = xor_operation(text[idx], key[key_idx])
result += xor_result
return result
if __name__ == '__main__':
message = "XOR Cipher!"
print(f"Origin message: {message}")
message = string_to_bytes(message)
print(f"Message in binary: {message}")
key = generate_key(len(message))
print(f"Key: {key}")
encryption = xor_en_decrypt(message, key)
print(f"Encryption: {encryption}")
decryption = xor_en_decrypt(encryption, key)
print(f"Decryption: {decryption}")
text = bytes_to_string(decryption)
print(f"Text: {text}")