Visual Basic.NET - Algortimo de encriptación SHA

 
Vista:

Algortimo de encriptación SHA

Publicado por José Luis Navarro (1 intervención) el 28/03/2007 00:03:53
Buenas tardes.

Tengo una base de datos en SQL Server 2005 con una tabla de Usuarios definida asi
CREATE TABLE [dbo].[Usuarios](
[usuario] [varchar](50) NULL,
[clave] [nvarchar](40) NULL
)

inserté un registro de la siguiente manera

insert into usuarios values ( 'prueba', 'clave')

para fines de aplicar la encriptación SHA1, cree el siguiente script

DECLARE @claveSHA nvarchar(40);
SELECT @claveSHA = CONVERT(nvarchar(40),'clave');
print HashBytes('sha1', @claveSHA)

update Usuarios set clave = HashBytes('sha1', @claveSHA) where usuario = 'prueba'

Luego desarrollo el formulario en Visual Basic .Net, creo una función que me calcule la clave SHA1
Private Function generarClaveSHA1(ByVal nombre As String) As String
' Crear una clave SHA1 como la generada por
' FormsAuthentication.HashPasswordForStoringInConfigFile
' Adaptada del ejemplo de la ayuda en la descripción de SHA1 (Clase)
Dim enc As New System.Text.UTF8Encoding()
Dim data() As Byte = enc.GetBytes(nombre)
Dim result() As Byte

Dim sha As New SHA1CryptoServiceProvider
' This is one implementation of the abstract class SHA1.
result = sha.ComputeHash(data)
'
' Convertir los valores en hexadecimal
' cuando tiene una cifra hay que rellenarlo con cero
' para que siempre ocupen dos dígitos.
Dim sb As New StringBuilder
For i As Integer = 0 To result.Length - 1
If result(i) < 16 Then
sb.Append("0")
End If
sb.Append(result(i).ToString("x"))
Next
'
Return sb.ToString.ToUpper
End Function

El problema que tengo es que ambas claves generadas tanto por SQL Server como por Visual .Net no coinciden, dónde la estoy embarrando?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Algortimo de encriptación SHA

Publicado por javier (9 intervenciones) el 03/04/2007 20:42:37
Buenas,
me pasaba algo parecido, eliminé esto:

' Convertir los valores en hexadecimal
' cuando tiene una cifra hay que rellenarlo con cero
' para que siempre ocupen dos dígitos.
Dim sb As New StringBuilder
For i As Integer = 0 To result.Length - 1
If result(i) < 16 Then
sb.Append("0")
End If
sb.Append(result(i).ToString("x"))
Next
'


y la clave que me devolvía era la buena, espero que te sirva.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar