Usuário com melhor resposta
login com criptografia, mensagem de erro 'usuario invalido'

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 ClassGrata e no aguardo
Tati
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.
- Marcado como Resposta Harley AraujoModerator segunda-feira, 30 de julho de 2012 14:24
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.
- Marcado como Resposta Harley AraujoModerator segunda-feira, 30 de julho de 2012 14:24
-
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!!!
-
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.
-
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.aspxhurbem