sql-server - decrypt - sql server hash sha1
Manejo de contraseñas hash almacenadas como varbinary en SQL Server y ASP clásico (3)
Recuerdo los días en los que solía criticar este tipo de cosas. Sugiero que obtenga una actualización a ASP.Net, pero mientras tanto, el siguiente código (VBScript) debe hacer lo que quiera:
<%
Dim result
main()
function main()
Dim userName : userName = "Martin"
Dim data : data = "4a5e6a8d521ed487b81c91e131cf27e8dae9b783"
Dim db: Set db = Server.CreateObject("ADODB.Connection")
db.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Password=password1;Initial Catalog=Test;Data Source=(local)"
Dim cmd : Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = db
cmd.CommandText = "dbo.[sp_save_user]"
cmd.CommandType = 4
cmd.Parameters.Append cmd.CreateParameter("@UserName", 200, 1, 50, userName)
Dim bytes : bytes = stringToBinary(data)
cmd.Parameters.Append cmd.CreateParameter("@Password", 204, 1, LenB(bytes), bytes)
cmd.Execute()
db.Close
result = "done"
end function
function stringToBinary(str)
dim ahex
for i=0 to len(str) - 1 step 2
Dim strDigit1
Dim strDigit2
strDigit1 = Ucase(Mid(str, i+1, 1))
strDigit2 = Ucase(Mid(str, i+2, 1))
Dim byteDigit1
Dim byteDigit2
byteDigit1 = InStr("0123456789ABCDEF", strDigit1) - 1
byteDigit2 = InStr("0123456789ABCDEF", strDigit2) - 1
ahex = ahex & ChrB((byteDigit1 * 16) + byteDigit2)
next
stringToBinary = ahex
end function
%>
<html>
<head>
<title>Test</title>
</head>
<body>
<h1><%= result %></h1>
</body>
</html>
Todas,
Lo siento de antemano: soy un principiante en la mayoría de los temas a continuación (SQL, ASP). De todas formas...
Tengo una aplicación web bastante simple que requiere que los usuarios inicien sesión con un nombre de usuario y una contraseña.
La interfaz crea un hash SHA1 salado de la contraseña y lo publica (junto con el nombre del usuario) en una página ASP.
Esa página ASP toma los datos, llama a un procedimiento almacenado en la base de datos de SQL Server y pasa el nombre de los usuarios y la contraseña hash; el procedimiento almacenado escribe la información en la tabla ''usuarios''.
El tipo de columna de contraseña en la tabla es varbinary.
Por lo que puedo decir, cuando el ASP obtiene la contraseña (password = Request.Form ("password")), es un String.
Puedo ''engañar'' a SQL Server para que lo maneje como un varbinary si creo la consulta de esta manera:
query = "EXEC sp_save_user @ username = ''" & username & "'', @ password = 0x" & password
IOW - Estoy anteponiendo un "0x" a la cadena de contraseña.
Sin embargo, he leído que es una mejor práctica usar una consulta parametrizada:
Ejemplo: SET objParam = objCommand.CreateParameter ("@ contraseña", 204, 1, 40, contraseña)
Sin embargo, esto falla porque se supone que el parámetro es binario (204), pero la contraseña es una cadena.
Entonces, ¿cómo convierto una cadena como "4a5e6a8d521ed487b81c91e131cf27e8dae9b783" a un archivo binario en ASP?
¡Muchas gracias de antemano!
Supongo que tiene alcance para cambiar la base de datos ... más específicamente, el procedimiento almacenado?
¿Por qué no simplemente aceptar el hash como una cadena y CASTARlo a varbinary dentro del SProc?
Leyendo más, no hay una función incorporada String -> Varbinary en SQL Server, pero esta función se ha ofrecido como una solución fácil,
Tal vez un poco sin relación, pero me pregunto, si está salando el hash en el cliente, ¿cómo está exactamente manteniendo la sal segura?