public string RecuperarMensajesSala(string guidResponse, string username)
        {
            try
            {
                DbConnection connection      = new DbConnection();
                List <Sala>  salasDeUsuarios = connection.BuscarVarios <Sala>("salas", Builders <Sala> .Filter.Eq("guid", guidResponse));
                var          filtro          = Builders <Usuario> .Filter.Eq("user", username);

                var  usuarioActual = connection.BuscarUno <Usuario>("users", filtro);
                Sala salaActual    = new Sala();
                foreach (var item in salasDeUsuarios)
                {
                    if (item.UsuarioA == usuarioActual.User)
                    {
                        salaActual = item;
                        break;
                    }
                }

                //Generar key DH para generar 10bitsSDES
                DiffieHellman PersonaA = new DiffieHellman(usuarioActual.NumeroPrivado)
                {
                    PublicoExterno = salaActual.ValorPublicoB
                };

                string cadenaLlaveSdes = Convert.ToString(PersonaA.GenerarKey(), 2).PadLeft(10, '0');
                Sdes   cipher          = new Sdes(cadenaLlaveSdes);

                List <Mensaje> mensajesEncriptados = connection.BuscarVarios <Mensaje>("mensajes",
                                                                                       Builders <Mensaje> .Filter.Eq("salaGuid", guidResponse));

                List <Mensaje> mensajesDesEncriptados = new List <Mensaje>();
                //Des encriptar los mensajes
                foreach (var item in mensajesEncriptados)
                {
                    string desEnc = "";
                    foreach (var caracter in item.Contenido)
                    {
                        byte letra = Convert.ToByte(caracter);
                        desEnc += Convert.ToChar(cipher.SDES_DeCipher(letra));
                    }
                    Mensaje mensajeDes = new Mensaje(guidResponse)
                    {
                        Contenido       = desEnc,
                        Guid            = item.Guid,
                        UsuarioEmisor   = item.UsuarioEmisor,
                        UsuarioReceptor = item.UsuarioReceptor
                    };
                    mensajesDesEncriptados.Add(mensajeDes);
                }

                var json = JsonConvert.SerializeObject(mensajesDesEncriptados);
                return(json);
            }
            catch
            {
                return("");
            }
        }
        public void NuevoMensaje(string emisor, string receptor, string contenido)
        {
            DbConnection connection = new DbConnection();
            //Obtener sala
            var filter = Builders <Sala> .Filter.Eq("usuarioA", emisor);

            var  salas = connection.BuscarVarios <Sala>("salas", filter);
            Sala sala  = new Sala();

            //Obtener la sala que coincide con emisor y receptor...
            foreach (var item in salas)
            {
                if (item.UsuarioB == receptor)
                {
                    sala = item;
                }
            }

            //Obtener el GUID de la sala
            string guidSala = sala.GUID;
            //Obtener usuario para encriptar con valor privado...
            var userFilter = Builders <Usuario> .Filter.Eq("user", emisor);

            var usuario = connection.BuscarUno <Usuario>("users", userFilter);
            //Recuperar valores publicos y provados para Encriptar...
            int valorPublicoReceptor = sala.ValorPublicoB;
            int valorPrivadoEmisor   = usuario.NumeroPrivado;

            DiffieHellman dh = new DiffieHellman(valorPrivadoEmisor);

            dh.PublicoExterno = valorPublicoReceptor;

            string LlaveSdes = Convert.ToString(dh.GenerarKey(), 2).PadLeft(10, '0');
            Sdes   cipher    = new Sdes(LlaveSdes);

            //Encriptar mensaje con SDES
            string mensajeEncrip = "";

            foreach (var item in contenido)
            {
                byte letra = Convert.ToByte(item);
                mensajeEncrip += Convert.ToChar(cipher.SDES_Cipher(letra));
            }

            Mensaje nuevoMensaje = new Mensaje(guidSala)
            {
                UsuarioEmisor   = emisor,
                UsuarioReceptor = receptor,
                Contenido       = mensajeEncrip
            };

            connection.InsertDb <Mensaje>("mensajes", nuevoMensaje);
        }
        public async Task <ActionResult> Historial()
        {
            var response = await GlobalVariables.WebApiClient.GetStringAsync("https://localhost:44343/api/main/Historial/" + username);

            var listaMensajes = JsonConvert.DeserializeObject <List <Mensaje> >(response);
            var historial     = new List <string>();

            if (listaMensajes.Count != 0)
            {
                /*var salaResponse = await GlobalVariables.WebApiClient.GetStringAsync(
                 *  "https://localhost:44343/api/main/GetSala/" + usuarioA + "/" + usuarioB);
                 * var salaEncontrada = JsonConvert.DeserializeObject<Sala>(salaResponse);*/

                foreach (var item in listaMensajes)
                {
                    string usuarioa = item.UsuarioEmisor;
                    var    queryA   = await GlobalVariables.WebApiClient.GetStringAsync("https://localhost:44343/api/main/ObtenerUsuario/" + usuarioa);

                    var    usuarioA = JsonConvert.DeserializeObject <Usuario>(queryA);
                    string usuariob = item.UsuarioReceptor;
                    var    queryB   = await GlobalVariables.WebApiClient.GetStringAsync("https://localhost:44343/api/main/ObtenerUsuario/" + usuariob);

                    var usuarioB = JsonConvert.DeserializeObject <Usuario>(queryB);

                    DiffieHellman DhUsuarioA = new DiffieHellman(usuarioA.NumeroPrivado);
                    DiffieHellman DhUsuarioB = new DiffieHellman(usuarioB.NumeroPrivado);
                    DhUsuarioB.PublicoExterno = DhUsuarioA.PublicoInterno;

                    string llaveSdes = Convert.ToString(DhUsuarioB.GenerarKey(), 2).PadLeft(10, '0');

                    Sdes cipher = new Sdes(llaveSdes);



                    string mensajeDes = "";
                    foreach (var character in item.Contenido)
                    {
                        byte letra = Convert.ToByte(character);
                        mensajeDes += Convert.ToChar(cipher.SDES_DeCipher(letra));
                    }

                    historial.Add(item.UsuarioEmisor + " a " + item.UsuarioReceptor + ": " + mensajeDes);
                }
            }
            else
            {
                Response.Write("<script>alert('El historial está vacío!!')</script>");
            }


            return(View(historial));
        }
Exemple #4
0
        static string DesEncriptarMensaje(string mensaje, string tenBitsInput)
        {
            string retorno = "";
            Sdes   cipher  = new Sdes(tenBitsInput);

            foreach (var item in mensaje)
            {
                byte input      = Convert.ToByte(item);
                byte desCifrado = cipher.SDES_DeCipher(input);

                retorno += Convert.ToChar(desCifrado);
            }

            return(retorno);
        }
        List <Mensaje> ListaMensajesDesEncriptados(List <Mensaje> encriptList, DbConnection connection)
        {
            List <Mensaje> retorno = new List <Mensaje>();

            foreach (var item in encriptList)
            {
                var emisor   = item.UsuarioEmisor;
                var usuarioA = connection.BuscarUno <Usuario>("users", Builders <Usuario> .Filter.Eq("user", emisor));
                var receptor = item.UsuarioReceptor;
                var usuarioB = connection.BuscarUno <Usuario>("users", Builders <Usuario> .Filter.Eq("user", receptor));

                DiffieHellman DhUsuarioA = new DiffieHellman(usuarioA.NumeroPrivado);
                DiffieHellman DhUsuarioB = new DiffieHellman(usuarioB.NumeroPrivado);
                DhUsuarioB.PublicoExterno = DhUsuarioA.PublicoInterno;

                string llaveSdes = Convert.ToString(DhUsuarioB.GenerarKey(), 2).PadLeft(10, '0');
                Sdes   cipher    = new Sdes(llaveSdes);

                string mensajeDesc = "";
                foreach (var caracter in item.Contenido)
                {
                    byte letra = Convert.ToByte(caracter);
                    mensajeDesc += Convert.ToChar(cipher.SDES_DeCipher(letra));
                }
                Mensaje desEncriptado = new Mensaje(item.SalaGuid)
                {
                    Contenido         = mensajeDesc,
                    Guid              = item.Guid,
                    UsuarioEmisor     = item.UsuarioEmisor,
                    UsuarioReceptor   = item.UsuarioReceptor,
                    ContenidoArchivos = item.ContenidoArchivos
                };

                retorno.Add(desEncriptado);
            }

            return(retorno);
        }