1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

AES_DECRYPT no C#

Discussão em 'Programação' iniciada por bandalho_zune, 18 de Setembro de 2008. (Respostas: 3; Visualizações: 1093)

  1. bandalho_zune

    bandalho_zune I'm cool cuz I Fold

    Boa tarde pessoal.
    Tenho aqui um problema numa aplicação que estou a desenvolver, tenho uma tabela "user" numa BD em MySql e queria guardar um campo encriptado (Password) para isso estou a utilizar a função do Mysql AES_ENCRYPT AES_DECRYPT, através do MySql Query Browser tudo funciona bem, através do C# devolve-me sempre "System.Byte[]".

    O query é este :

    Código:
    "SELECT AES_DECRYPT(Password,'xpto') FROM user WHERE Username = 'teste'"
    O método interrogador da BD é:

    Código:
    public string getValores(string query, int index)
        {
    
            MySqlDataReader myReader;
            MySqlCommand myCommand = new MySqlCommand(query, Conn.connect);
            if (Conn.connect.State > 0) { Conn.connect.Close(); }
            Conn.connect.Open();
            myReader = myCommand.ExecuteReader();
    
            try
            {
                while (myReader.Read())
                {
                    strValores = Convert.ToString(myReader.GetValue(index));
                }
                return strValores;
    
            }
            finally
            {
                myReader.Close();
                connect.Close();
                strValores = "";
    
            }
        }
     
  2. NoMercy

    NoMercy Power Member

    se o reader te está a devolver um byte[], podes sempre converter o byte[] para string com o Convert.ToBase64String
     
  3. bandalho_zune

    bandalho_zune I'm cool cuz I Fold

    O problema é que ele não devia devolver Byte[] o valor que ele devia devolver é "pass", isto só acontece se estiver a consultar um campo encriptado, num campo VarChar ou outro devolve sempre bem.
     
  4. bandalho_zune

    bandalho_zune I'm cool cuz I Fold

    Ja resolvi! :p bastou alterar no reader a função a usar, em vez de usar GetValue(int) usei GetString(int).
    Aqui vai o código a funcionar:
    Código:
    public string getValores(string query, int index)
        {
    
            MySqlDataReader myReader;
            MySqlCommand myCommand = new MySqlCommand(query, Conn.connect);
            if (Conn.connect.State > 0) { Conn.connect.Close(); }
            Conn.connect.Open();
            myReader = myCommand.ExecuteReader();
    
            try
            {
                while (myReader.Read())
                {
                    //strValores = Convert.ToString(myReader.GetValue(index));
                    strValores = Convert.ToString(myReader.GetString(index));
                }
                return strValores;
    
            }
            finally
            {
                myReader.Close();
                connect.Close();
                strValores = "";
    
            }
        }
     

Partilhar esta Página