예제 #1
0
        public static void CadastraUsuarioDemonstracao(string nome, string email, string keyDescriptografada)
        {
            try
            {
                UsuarioRepository usuarioRepository = new UsuarioRepository();
                KeyRepository     keyRepository     = new KeyRepository();
                SaltRepository    saltRepository    = new SaltRepository();

                if (usuarioRepository.getAll().Count == 0)
                {
                    // Recupero o Salt inicial e o final
                    string salt1 = SaltService.geraSalt();
                    string salt2 = SaltService.geraSalt();

                    // Criptografo a senha
                    string KeyCriptografada = CriptografaService.GetKey(salt1, salt2, keyDescriptografada);

                    // Divido a Senha em duas partes
                    // A idéia á aumentar a segurança gravando a senha do usuário em
                    // dois locais diferentes. Preferencialmente servidores diferentes
                    string InitialKey = CriptografaService.InitialKey(KeyCriptografada);
                    string FinalKey   = CriptografaService.FinalKey(KeyCriptografada);

                    // Crio novo usuario
                    Usuario usuario = new Usuario();
                    usuario.Nome  = nome;
                    usuario.Email = email;
                    usuarioRepository.Add(usuario);

                    // Crio nova key
                    Key key = new Key();
                    key.UsuarioId = usuario.Id;
                    key.KeyString = InitialKey;
                    keyRepository.Add(key);

                    // Crio novo Salt e armazeno a parte final da key
                    Salt salt = new Salt();
                    salt.KeyId          = key.Id;
                    salt.Salt1          = salt1;
                    salt.Salt2          = salt2;
                    salt.FinalKeyString = FinalKey;

                    // A gravação do Salt e da parte final da key deveria ser realizada através
                    // de uma chamada a uma outra api, com uma credencial valida.
                    // Por motivos de tempo estou simplificando e chamando diretamente o repositório
                    saltRepository.Add(salt);
                }
            }
            catch (Exception e)
            {
                throw e;
            }
        }
예제 #2
0
        public static bool ValidaLogin(string nome, String senha)
        {
            try
            {
                // Recupero o usuario
                Usuario usuario = UsuarioService.GetUsuarioByName(nome);
                Key     key     = KeyService.GetKeyByUsuarioId(usuario.Id);

                // A recupoeração deste registro deveria ser realizado por uma API
                // utilizando algum metodo de autenticação e autorizacao
                Salt salt = SaltService.GetSaltByKey(key.Id);

                string KeyComplete    = key.KeyString + salt.FinalKeyString;
                string KeyComparation = CriptografaService.GetKey(salt.Salt1, salt.Salt2, senha);

                return(KeyComplete == KeyComparation);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message + e.StackTrace);
                return(false);
            }
        }