C # hash encryption

-1

I was able to create a registry with encrypted password, but in the method of access (log in) I am in doubt on how to get the password entered and compare it with the password registered with encryption. Here is my code:

class FuncionarioDAO
    {
        public bool tem = false;
        public String mensagem = "";
        SqlCommand cmd = new SqlCommand();
        Conexao conexaoBD = new Conexao();
        SqlDataReader dr;

        public bool acessar(String usuario, String senha)
        {
            var hash = new Hash(SHA512.Create());
            string hashTxtSenha = null;            

            cmd.CommandText = "select * from funcionario where FuncionarioLogin = @usuario and Senha = @senha";
            cmd.Parameters.AddWithValue("@usuario", usuario);
            cmd.Parameters.AddWithValue("@senha", senha);           

            try
            {
                cmd.Connection = conexaoBD.Conectar();
                dr = cmd.ExecuteReader();
               hashTxtSenha = hash.CriptografarSenha(senha);
                if (dr.HasRows)
                {
                    if(hash.VerificarSenha(hashTxtSenha, senha))
                    {
                        tem = true;
                    }                                                          
                }
                conexaoBD.Desconectar();
                dr.Close();
            }
            catch (SqlException)
            {

                this.mensagem = "Erro com Banco de Dados!";
            }
            return tem;
        }

        public String cadastrar(String usuario, String senha, String confirmar, String nome, String email, String telefone, String celular, String nivelAcesso, String nomeExibicao)
        {
            var hash = new Hash(SHA512.Create());
            tem = false;
            if(senha.Equals(confirmar))
            {
                cmd.CommandText = @"insert into Funcionario  
                                (FuncionarioLogin, Senha, Nome, Email, Telefone, Celular, NivelAcesso, NomeExibicao)
                               values (@usuario, @senha, @nome, @email, @telefone, @celular, @nivelAcesso, @nomeExibicao)";
                cmd.Parameters.AddWithValue("@usuario", usuario);
                cmd.Parameters.AddWithValue("@senha", hash.CriptografarSenha(senha));
                cmd.Parameters.AddWithValue("@nome", nome);
                cmd.Parameters.AddWithValue("@email", email);
                cmd.Parameters.AddWithValue("@telefone", telefone);
                cmd.Parameters.AddWithValue("@celular", celular);
                cmd.Parameters.AddWithValue("@nivelAcesso", nivelAcesso);
                cmd.Parameters.AddWithValue("@nomeExibicao", nomeExibicao);                

                try
                {
                    cmd.Connection = conexaoBD.Conectar();
                    cmd.ExecuteNonQuery();
                    conexaoBD.Desconectar();
                    this.mensagem = "Cadastrado com Sucesso!";
                    tem = true;

                }
                catch (SqlException)
                {

                    this.mensagem = "Erro com Banco de Dados!";
                }
            } 
            else
            {
                this.mensagem = "Senhas não correspondem!";
            }
            return mensagem;
        }
}

My hash class looks like this:

public class Hash
{
    private HashAlgorithm _algoritmo;

    public Hash(HashAlgorithm algoritmo)
    {
        _algoritmo = algoritmo;
    }

    public string CriptografarSenha(string senha)
    {
        var valorCodificado = Encoding.UTF8.GetBytes(senha);
        var senhaCifrada = _algoritmo.ComputeHash(valorCodificado);
        var sb = new StringBuilder();
        foreach (var caractere in senhaCifrada)
        {
            sb.Append(caractere.ToString("X2"));
        }
        return sb.ToString();
    }
    public bool VerificarSenha(string senhaDigitada, string senhaCadastrada)
    {
        if (string.IsNullOrEmpty(senhaCadastrada))
            throw new NullReferenceException("Cadastre uma senha.");
        var senhaCifrada = _algoritmo.ComputeHash(Encoding.UTF8.GetBytes(senhaDigitada));
        var sb = new StringBuilder();
        foreach (var caractere in senhaCifrada)
        {
            sb.Append(caractere.ToString("X2"));
        }
        return sb.ToString() == senhaCadastrada;
    }
}
    
asked by anonymous 16.10.2018 / 04:33

1 answer

0

As you are encrypting the password before entering the bank, you will need to encrypt it in the same way to use the parameter of your select otherwise you will not find your data in the bank.

See how it would look.

public bool acessar(String usuario, String senha)
{
    bool tem = false;
    var hash = new Hash(SHA512.Create());
    string hashTxtSenha = = hash.CriptografarSenha(senha);            

    cmd.CommandText = "select * from funcionario where FuncionarioLogin = @usuario and Senha = @senha";
    cmd.Parameters.AddWithValue("@usuario", usuario);
    cmd.Parameters.AddWithValue("@senha", hashTxtSenha);           

    try
    {
        cmd.Connection = conexaoBD.Conectar();
        dr = cmd.ExecuteReader();      

        tem = dr.HasRows;
        BD.Desconectar();

        dr.Close();
    }
    catch (SqlException)
    {
        this.mensagem = "Erro com Banco de Dados!";
    }
    return tem;
}
    
17.10.2018 / 13:46