-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrsa.py
66 lines (47 loc) · 1.9 KB
/
rsa.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
from src.utils import MathUtils, FileUtils, Validator
from src.mdchar import *
validator = Validator()
mathUtils = MathUtils()
fileUtils = FileUtils()
class RSA:
def generate_key(self):
"""Gera a chave pública pegando todos os inputs do usuário"""
[p, q] = validator.get_p_and_q_input()
# Tamanho do conjunto finito de valores para
# que possamos fazer o caminho inverso ao realizado
# para cifrar a mensagem
n = p * q
while n <= 26:
print("[!] P * Q precisa ser maior que 26")
p = validator.get_prime_input("P")
q = validator.get_prime_input("Q")
n = p * q
totiente = mathUtils.totiente(p, q)
e = validator.get_e_input(totiente)
fileUtils.write_file(f"{n} {e}", "public_key")
def encrypt(self):
message = input("[+] Digite a mensagem a ser criptografada: ")
n = int(input("[+] Valor de N: "))
e = int(input("[+] Valor de E: "))
encrypted = []
for char in message:
char_code = md_ord(char)
encrypted_char = pow(char_code, e, n)
encrypted.append(encrypted_char)
fileUtils.write_file(str(encrypted), "encrypted_message")
def decrypt(self):
"""Função para descriptografar uma determinada mensagem"""
p = int(input("[+] Valor de P: "))
q = int(input("[+] Valor de Q: "))
e = int(input("[+] Valor de E: "))
encrypted_content = fileUtils.read_encrypted()
parsed_array = fileUtils.str_to_array(encrypted_content)
phiN = (p - 1) * (q - 1)
n = p * q
d = mathUtils.find_congruence(e, 1, phiN)
decrypted_message = ""
for char_code in parsed_array:
char_int = int(char_code)
decrypted_code = pow(char_int, d, n)
decrypted_message += md_chr(decrypted_code)
print(decrypted_message)