def listenFor(self, qte=5): # O socket começa a esperar por clientes limitando a # 5 conexões por vez self.sockobj.listen(qte) print('Esperando conexão. Numero máximo = {}'.format(qte)) while True: # Aceita uma conexão quando encontrada e devolve a # um novo socket conexão e o endereço do cliente c_socket, addr = self.sockobj.accept() print('Server conectado por', addr) while True: # Recebe data enviada pelo cliente # até 1024 bytes data = c_socket.recv(1024) # Se não receber nada paramos o loop if not data: break # O servidor manda de volta uma resposta data_split = data.split(b'::-+-::') t_c_tgs_cryp = data_split[1] t_c_tgs = my_aes.decrypt(t_c_tgs_cryp, self.k_tgs) t_c_tgs = t_c_tgs.split(':') id_c = t_c_tgs[0] t_r = t_c_tgs[1] k_c_tgs = t_c_tgs[2] m3p1 = my_aes.decrypt(data_split[0], k_c_tgs).split(':') c_id_c = m3p1[0] id_s = m3p1[1] c_t_r = m3p1[2] n2 = m3p1[3] if c_id_c != id_c: c_socket.send(b'Client id missmatch.' + b'::-+-::' + b'.') else: if self.service_in_db(str(id_s)): m4 = self.generatem4(id_c, t_r, n2, id_s, k_c_tgs) c_socket.send(m4) else: c_socket.send(b'Servico nao encontrado.' + b'::-+-::' + b'.') # Fecha a conexão criada depois de responder o cliente c_socket.close()
def auth_with_as(self, id_s=1, t_r=60): self.id_s = id_s self.t_r = t_r n1 = int.from_bytes(os.urandom(tam), byteorder="big") parte1 = '{}'.format(self.id_c) parte2 = '{}:{}:{}'.format(id_s, t_r, n1) p2crypt = my_aes.crypt(parte2, self.kc) self.m1 = parte1.encode() + b'::-+-::' + p2crypt self.connectto(port=50001) self.m2 = self.send_msg(self.m1) self.close_conection() m2split = self.m2.split(b'::-+-::') m2_p1_cryp = m2split[0] m2_p1 = my_aes.decrypt(m2_p1_cryp, self.kc) self.k_c_tgs, n1rsp = m2_p1.split(':') n1rsp = int(n1rsp) if n1 != n1rsp: print('ERROR !!! n1 does not match.') self.t_c_tgs = m2split[1] print('m1= {}'.format(self.m1)) print('m2= {}'.format(self.m2))
def use_service(self): n3 = int.from_bytes(os.urandom(tam), byteorder="big") parte1 = '{}:{}:{}:{}'.format(self.id_c, self.t_r, self.id_s, n3) p1_cryp = my_aes.crypt(parte1, self.k_c_s) self.m5 = p1_cryp + b'::-+-::' + self.t_c_s self.connectto(port=50003) self.m6 = self.send_msg(self.m5) self.close_conection() m6_decryp = my_aes.decrypt(self.m6, self.k_c_s) resposta, n3rsp = m6_decryp.split(':') if n3 != int(n3rsp): print('ERROR !!! n3 does not match.') print('m5= {}'.format(self.m5)) print('m6= {}'.format(self.m6)) print('resposta do servico:\n{}'.format(resposta))
def listenFor(self, qte=5): # O socket começa a esperar por clientes limitando a # 5 conexões por vez self.sockobj.listen(qte) print('Esperando conexão. Numero máximo = {}'.format(qte)) while True: # Aceita uma conexão quando encontrada e devolve a # um novo socket conexão e o endereço do cliente c_socket, addr = self.sockobj.accept() print('Server conectado por', addr) while True: # Recebe data enviada pelo cliente # até 1024 bytes data = c_socket.recv(1024) # Se não receber nada paramos o loop if not data: break data_split = data.split(b'::-+-::') user_id_b = data_split[0] crip_bin = data_split[1] user_id = user_id_b.decode() if self.user_in_db(str(user_id)): # descriptografando m1_dcrypt = my_aes.decrypt(crip_bin, self.user_db[user_id]) m1_dcrypt_split = m1_dcrypt.split(':') t_r = m1_dcrypt_split[1] n1 = m1_dcrypt_split[2] m2 = self.generatem2(user_id, t_r, n1) c_socket.send(m2) else: c_socket.send(b'Usuario nao encontrado.' + b'::-+-::' + b'.') # Fecha a conexão criada depois de responder o cliente c_socket.close()
def get_ticket(self): n2 = int.from_bytes(os.urandom(tam), byteorder="big") parte1 = '{}:{}:{}:{}'.format(self.id_c, self.id_s, self.t_r, n2) p1_cryp = my_aes.crypt(parte1, self.k_c_tgs) self.m3 = p1_cryp + b'::-+-::' + self.t_c_tgs self.connectto(port=50002) self.m4 = self.send_msg(self.m3) self.close_conection() m4split = self.m4.split(b'::-+-::') self.t_c_s = m4split[1] m4_p1 = m4split[0] m4_p1 = my_aes.decrypt(m4_p1, self.k_c_tgs) self.k_c_s, n2rsp = m4_p1.split(':') n2rsp = int(n2rsp) if n2 != n2rsp: print('ERROR !!! n2 does not match.') print('m3= {}'.format(self.m3)) print('m4= {}'.format(self.m4))
import sys import getpass import my_aes password = getpass.getpass('password> ') dec = my_aes.decrypt(sys.stdin.buffer.read(), password) sys.stdout.buffer.write(dec)