none
login com criptografia, mensagem de erro 'usuario invalido' RRS feed

  • Pergunta

  • Boa tarde,

    Gente alguém poderia dar uma ajudinha, sou iniciante e ainda muito imatura referente ao assunto, mas o problema é o seguinte:

    Fiz um formulario de login, conforme uma video aula no site http://hinfos.com, porém na aula é codificado para uso em conjunto do bco de dados MySQL, e eu estou usando o SQL Server, a questão é a seguinte fiz alterações que consegui e sabia de codigo de conexao sql no VB, mas toda vez que tento fazer o login da mensagem de 'usuario ou senha inválidos', mesmo com os dados identicos ao da tabela no Bco, mas mesmo assim continua o mesmo erro.

    Dados:

    Bco:

    tabela usuario

    campo login

    campo senha

    VB:

    txtusuario

    txtsenha

    Segue o código


    Uma Glass...

    Imports System.Text
    Imports System.Security.Cryptography
    Imports System.Data.SqlClient

    Public Class criptografarLogin
        
           Public strcon As String

        'Public strcon As String
        'método construtor da classe
        Public Sub New()
                    Dim servidor As String = "Game"
            Dim usuario As String = "tati"
            Dim senha As String = "123456"
            Dim banco As String = "Petshop"
            strcon = "server=" & servidor & ";database=" & banco & ";user id=" & usuario & ";pwd=" & senha


        End Sub

        'função de criptografia,que  vai receber a senha e vai retornar um codigo gerado pela
        'criptografia md5 e vai comparar no BD
        Public Function cripSenha(ByVal texto As String) As String
            'vai garantir que o texto que entrar vai ter um padrao de codificação
            Dim Ue As New UnicodeEncoding
            'gera um array de bite de acordo com o texto que digitou, neste caso a senha
            Dim ByteSourceTexto() As Byte = Ue.GetBytes(texto)

            Dim md5 As New MD5CryptoServiceProvider

            'cria um embaralhamento da variavel de byteSource
            Dim bytehash() As Byte = md5.ComputeHash(ByteSourceTexto)

            'retornar valor da nossa'gateharsh', mas antes conveter de novo pra string
            Return Convert.ToBase64String(bytehash)

        End Function
        'função pra fazer verificação no BS se os usuários existem
        Public Function Login(ByVal usuario As String, ByVal senha As String) As Boolean

            Dim str As String

            str = "select * from usuarios where login = '" & usuario & "' and senha = '" & cripSenha(senha) & "'"

            Dim conn As New SqlConnection(strcon)

            'comando que será executado no servidor
            Dim cmd As New SqlCommand(str, conn)

            'codigo protegido
            Try
                'esta variavel chamada dr vai receber o comando sql + executereader
                Dim dr As SqlDataReader
                conn.Open()
                dr = cmd.ExecuteReader
                ' para saber se reotornou alguma coisa do comando sql devemos verificar se o datareader retorou linha
                'verifica se o dataReader retornou linha
                If dr.Read Then
                    Return True
                Else
                    Return False
                End If

            Catch ex As Exception
                MessageBox.Show(ex.Message)
            Finally
                conn.Close()
            End Try
            Return True
        End Function

    End Class


    No form....

    Public Class FrmLogin

        Private Sub btnLogar_Click(sender As System.Object, e As System.EventArgs) Handles btnLogar.Click
            'classe ja criada
            Dim logar As New criptografarLogin

            If logar.Login(txtUsuario.Text, txtSenha.Text) = True Then
                MessageBox.Show("Logado com sucesso")
                Form1.Show()
            Else
                MsgBox("Usuário ou senha inválido.", vbCritical, "Login")
            End If


        End Sub
    End Class

    Grata e no aguardo

    Tati



    sexta-feira, 27 de julho de 2012 18:46

Respostas

  • Troque este:

     If dr.Read Then

    por 

     If dr.HasRows Then

    Outra possibilidade é que o valor retornado pela função cripSenha não esteja igual ao banco.

    sexta-feira, 27 de julho de 2012 22:18

Todas as Respostas

  • Troque este:

     If dr.Read Then

    por 

     If dr.HasRows Then

    Outra possibilidade é que o valor retornado pela função cripSenha não esteja igual ao banco.

    sexta-feira, 27 de julho de 2012 22:18
  • obrigado Danimar, troquei o 

    If dr.Read Then

    por 

     If dr.HasRows Then

    Porem continua a mesma mensagem de erro  'usuario ou senha inválidos', mesmo com login e senha identicos ao do bco de Dados.

    Referente a outra possibilidade não entendi bem, desculpe pois sou iniciante, seria que o comando SQl da função está errada???

    Valeu!!!

    sexta-feira, 3 de agosto de 2012 19:26
  • Assim, na sua função cripSenha(senha), ele retorna a senha criptografada.

    A sua senha no banco de dados, também deve estar criptografada, igual a senha que retorna da função.

    O seu código está certinho, a unica coisa é que ou usuário, ou senha não esta certo mesmo.


    segunda-feira, 6 de agosto de 2012 17:30
  • Reforçando o que o Danimar disse.

    Faça o seguinte:

    Comente o trecho str = "select * from usuarios where login = '" & usuario & "' and senha = '" & cripSenha(senha) & "'"

    e escreva a query pronta com os valores do banco de dados, algo assim:

    str = "select * from usuarios where login = 'tati'  and senha = '123qwe!@#'"

    Se funcionar é a função cripSenha que não gera o valor correto...Ou o valor do banco não está correto...

    Sugiro também você começar a usar SQLParameters vai te ajudar no futuro.

    SQL Parameters
    http://msdn.microsoft.com/pt-br/library/system.data.sqlclient.sqlparameter.aspx


    hurbem

    terça-feira, 7 de agosto de 2012 12:18