-
Notifications
You must be signed in to change notification settings - Fork 0
/
DEMOFileMasterpiece.py
86 lines (67 loc) · 3.59 KB
/
DEMOFileMasterpiece.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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import time
import random
import string
import importlib.util
import sys
from decimal import Decimal, getcontext
# Import the khan_encryption module from a specific path
module_name = "khan_encryption"
file_path = "/home/zephyr27/Documents/GitHub/cyclic/khan_encryption.py"
spec = importlib.util.spec_from_file_location(module_name, file_path)
ke = importlib.util.module_from_spec(spec)
sys.modules[module_name] = ke
spec.loader.exec_module(ke)
def generate_cyclic_sequence(prime, length):
getcontext().prec = length + 10 # Set precision to required length + buffer
decimal_expansion = str(Decimal(1) / Decimal(prime))[2:] # Get decimal expansion as string, skipping '0.'
return decimal_expansion[:length]
def get_user_input():
# User 1 input for starting dial position
start_position = int(input(f"User 1: Enter the starting dial position (integer between 1 and {cyclic_prime - 1}): "))
# User 2 input for superposition sequence (must be an even integer)
while True:
superposition_sequence_length = int(input("User 2: Enter the superposition sequence length (even integer): "))
if superposition_sequence_length % 2 == 0:
break
else:
print("Superposition sequence length must be an even integer. Please try again.")
return start_position, superposition_sequence_length
def calculate_z_value(superposition_sequence_length):
# Calculate z_value based on the superposition sequence length
z_value = superposition_sequence_length - 1
return z_value
def measure_khan_encryption(plaintext, start_position, superposition_sequence_length):
cyclic_sequence = generate_cyclic_sequence(cyclic_prime, cyclic_prime - 1)
# Generate superposition sequence
superposition_sequence = [random.choice([-1, 1]) for _ in range(superposition_sequence_length)]
while sum(superposition_sequence) != 0:
superposition_sequence = [random.choice([-1, 1]) for _ in range(superposition_sequence_length)]
# Calculate z_value
z_value = calculate_z_value(superposition_sequence_length)
# Encrypt the plaintext
start_time = time.time()
ciphertext, char_to_movement, movement_to_char, z_value, superposition_sequence, iv, salt, z_layers = ke.khan_encrypt(plaintext, cyclic_prime, cyclic_sequence, start_position)
encryption_time = time.time() - start_time
# Decrypt the ciphertext
start_time = time.time()
decrypted_text = ke.khan_decrypt(ciphertext, char_to_movement, movement_to_char, z_value, superposition_sequence, iv, salt, z_layers, cyclic_prime, start_position, cyclic_sequence)
decryption_time = time.time() - start_time
return encryption_time, decryption_time, decrypted_text
def main():
global cyclic_prime
cyclic_prime = 1051 # Set the cyclic prime to 1051
# Get user input for private keys
start_position, superposition_sequence_length = get_user_input()
# Generate random plaintext
plaintext = ke.generate_plaintext(128)
# Measure encryption and decryption
encryption_time, decryption_time, decrypted_text = measure_khan_encryption(plaintext, start_position, superposition_sequence_length)
# Display results
print("\nEncryption and Decryption Results:")
print("Original Plaintext:", plaintext)
print("Decrypted Plaintext:", decrypted_text)
print(f"Encryption Time: {encryption_time} seconds")
print(f"Decryption Time: {decryption_time} seconds")
print("Decryption Successful" if plaintext == decrypted_text else "Decryption Failed")
if __name__ == "__main__":
main()