예제 #1
0
    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()
예제 #2
0
    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))
예제 #3
0
    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))
예제 #4
0
    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()
예제 #5
0
    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))
예제 #6
0
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)