Usuário com melhor resposta
Hash

Pergunta
-
Boa tarde,
possuo uma base de dados, sendo utilizada por uma aplicação Web em Asp.Net, onde a senha dos usuários é guardada em Hash, usando o método FormsAuthentication.HashPasswordForStoringInConfigFile do tipo sha1.
Porém estou criando uma aplicação Windows Forms, que necessita logar no mesmo banco, e para isso estou usando o método
System.Security.Cryptography.SHA1CryptoServiceProvider para comparar a senha digitada com a senha do banco de dados, pois não consegui usar o mesmo método utilizado na plataforma Web.
O problema é que o Hash gerado tá ficando diferente. O que tá errado?
Respostas
-
O método em ASP.NET formata os bytes para hexadecimal antes de retornar a string. Você deve fazer a mesma coisa:
Dim sha1 As New System.Security.Cryptography.SHA1CryptoServiceProvider
Dim sha1Bytes As Byte()
Dim encoder As New System.Text.UTF8Encoding()
Dim saida As String = String.Empty
Dim b As Byte
sha1Bytes = sha1.ComputeHash(encoder.GetBytes(Me._usuSenha))
For Each b In sha1Bytes
saida &= b.ToString("X2") ' <-- Formata para hexa de dois dígitos.
Next b
Me._usuSenha = saida
Todas as Respostas
-
-
Em Asp.Net, quando gravo o usuário:
Dim
anyParams() As SqlParameter = New SqlParameter(4) {}anyParams(0) =
New SqlParameter("@funCodigo", _funCodigo)anyParams(1) =
New SqlParameter("@usuLogin", _usuLogin)anyParams(2) =
New SqlParameter("@usuSenha", FormsAuthentication.HashPasswordForStoringInConfigFile(_usuSenha, "sha1"))anyParams(3) =
New SqlParameter("@nivCodigo", _nivCodigo)anyParams(4) =
New SqlParameter("@usuStatus", usuStatus)Na aplicação Windows, quando faço o hash:
Dim
sha1 As New System.Security.Cryptography.SHA1CryptoServiceProvider Dim sha1Bytes As Byte() Dim encoder As New System.Text.UTF8Encoding() Dim saida As String Dim b As Bytesha1Bytes = sha1.ComputeHash(encoder.GetBytes(
Me._usuSenha)) For Each b In sha1Bytessaida &= b
Next b Me._usuSenha = saidaSó que o valor do Hash fica totalmente diferente do que tá no banco, pro mesmo valor digitado.
-
-
-
O método em ASP.NET formata os bytes para hexadecimal antes de retornar a string. Você deve fazer a mesma coisa:
Dim sha1 As New System.Security.Cryptography.SHA1CryptoServiceProvider
Dim sha1Bytes As Byte()
Dim encoder As New System.Text.UTF8Encoding()
Dim saida As String = String.Empty
Dim b As Byte
sha1Bytes = sha1.ComputeHash(encoder.GetBytes(Me._usuSenha))
For Each b In sha1Bytes
saida &= b.ToString("X2") ' <-- Formata para hexa de dois dígitos.
Next b
Me._usuSenha = saida
-