-
Notifications
You must be signed in to change notification settings - Fork 0
/
processo de criptografia.py
132 lines (92 loc) · 2.68 KB
/
processo de criptografia.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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
import random
#MÉTODO PARA VERIFICAR SE O NÚMERO E PRIMO
def primo(num):
c = 1
cont = 0
while c <= num:
if num % c == 0:
cont += 1
c += 1
else:
c += 1
if cont == 2:
return True #RETORNA TRUE SE FOR UM NÚMERO PRIMO!
else:
return False
#METODO PARA DEFINIR D
def defineD(phiN,e):
d = 0
d = d * e
while(d%phiN):
d += 1
return d
def mod(a,b):
if(a<b):
return a
else:
c=a%b
return c
def private_key(toti, e):
d = 0
while(mod(d*e, toti)!=1):
d +=1
return d
################################### CRIAÇÃO DA CHAVE PUBLICA ##############################################################
aux = False
while aux == False: #gera dois números aleatorios até que os dois sejam primos
p = random.randint(1,999)
q = random.randint(1,999)
if p == q:
aux = False
elif primo(p) and primo(q):
aux = True
else:
aux = False
#P e Q já são números primos, então já é possivel calcular o phi de N
n = p * q
phiN = (p-1) * (q-1)
#A variavel ""E"" deve ser um número primo e maior que 1 e menor que phiN
aux1 = False
while aux1 == False:
e = random.randint(1,phiN) #gera um número aleatorio, entre 1 e phiN
if primo(e): #verifica se o número gerado é primo
aux1 = True
#################################### criação da chave privada ############################
d = private_key(phiN,e)
################################### criptografando texto ##############################
texto = input("Informe um texto: ")
listacrip = []
for caracter in texto:
asc = ord(caracter)
num = asc ** e
listacrip.append(mod(num, n))
################################### descriptografando texto ###############################33
indice = 0
listadescrip = []
listaAsc = []
for letra in listacrip:
caracter = listacrip[indice]
result = caracter ** d
valor = mod(result, n)
listaAsc.append(valor)
listadescrip.append(chr(valor))
indice += 1
print("")
print("Primeiro número aleatorio P: " + str(p))
print("Segundo número aleatorio Q: " + str(q))
print("")
print("Chave E: " + str(e))
print("Chave N: " + str(n))
print("Esse é o phiN de N: " + str(phiN))
print("Chave D: " + str(d))
print("")
print("Texto que foi criptografada: " + '\033[32m'+ texto +'\033[0;0m' )
print("")
print("Essa é a lista criptografada: ")
print(listacrip)
print("")
print("Essa é a lista ASC, faz parte do processo de descriptografia: ")
print(listaAsc)
print("")
print("Essa é a lista descriptografada: ")
print(listadescrip)