crypto/custom_encryption
This commit is contained in:
64
crypto/custom_encryption/custom_encryption.py
Normal file
64
crypto/custom_encryption/custom_encryption.py
Normal file
@@ -0,0 +1,64 @@
|
||||
from random import randint
|
||||
import sys
|
||||
|
||||
|
||||
def generator(g, x, p):
|
||||
return pow(g, x) % p
|
||||
|
||||
|
||||
def encrypt(plaintext, key):
|
||||
cipher = []
|
||||
for char in plaintext:
|
||||
cipher.append(((ord(char) * key*311)))
|
||||
return cipher
|
||||
|
||||
|
||||
def is_prime(p):
|
||||
v = 0
|
||||
for i in range(2, p + 1):
|
||||
if p % i == 0:
|
||||
v = v + 1
|
||||
if v > 1:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
|
||||
def dynamic_xor_encrypt(plaintext, text_key):
|
||||
cipher_text = ""
|
||||
key_length = len(text_key)
|
||||
for i, char in enumerate(plaintext[::-1]):
|
||||
key_char = text_key[i % key_length]
|
||||
encrypted_char = chr(ord(char) ^ ord(key_char))
|
||||
cipher_text += encrypted_char
|
||||
return cipher_text
|
||||
|
||||
|
||||
def test(plain_text, text_key):
|
||||
p = 97
|
||||
g = 31
|
||||
if not is_prime(p) and not is_prime(g):
|
||||
print("Enter prime numbers")
|
||||
return
|
||||
a = randint(p-10, p)
|
||||
b = randint(g-10, g)
|
||||
print(f"a = {a}")
|
||||
print(f"b = {b}")
|
||||
u = generator(g, a, p)
|
||||
v = generator(g, b, p)
|
||||
key = generator(v, a, p)
|
||||
b_key = generator(u, b, p)
|
||||
shared_key = None
|
||||
if key == b_key:
|
||||
shared_key = key
|
||||
else:
|
||||
print("Invalid key")
|
||||
return
|
||||
semi_cipher = dynamic_xor_encrypt(plain_text, text_key)
|
||||
cipher = encrypt(semi_cipher, shared_key)
|
||||
print(f'cipher is: {cipher}')
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
message = sys.argv[1]
|
||||
test(message, "trudeau")
|
Reference in New Issue
Block a user