HASH de un String |
Responder |
Autor | ||||
thrall
Nuevo Unido: 04/Agosto/2020 Localización: mexico Estado: Sin conexión Puntos: 21 |
Tema: HASH de un String Enviado: 11/Agosto/2020 a las 17:41 |
|||
Buen día: En la aplicación que estoy realizando, es necesario tener usuario y contraseña para poder acceder a los formularios. Tengo ya programada toda la parte del login, incluso haciendo un HASH SHA512 del password que almaceno en una tabla y es el que uso para comparar con el password al momento de realizar el login. Les pongo el código que utilizo para realizar el HASH, el cual mando llamar desde el formulario login con:
El cual llama la funcion SHA512:
y las funciones para convertir a base hexadecimal o cadena de caracteres:
El problema es que para poder utilizar estas es necesario tener .Net Framework 3.5 instalado, pero en los equipos donde se quiere distribuir la base, es muy probable que no lo tenga instalado. ¿Hay alguna manera de realizar el HASH sin utilizar librerías de .Net o en su defecto utilizar librerías de .Net "nativo" en windows 10? o bien ¿alguna manera de verificar si está está instalado el .Net 3.5 y en caso de que no esté, lazar la instalación desde codigo vba? Sin más por el momento, agradezco enormemente su ayuda. Saludos.
Editado por thrall - 11/Agosto/2020 a las 21:03 |
||||
thrall
Nuevo Unido: 04/Agosto/2020 Localización: mexico Estado: Sin conexión Puntos: 21 |
Enviado: 11/Agosto/2020 a las 21:03 | |||
Que tal, investigando y haciendo pruebas con diferentes códigos e ideas, encontré una solución que tal vez no sea la más eficaz o eficiente, sin embargo, realiza lo que necesito y sin necesidad de tener componentes adicionales instalados.
La solución: utilizar las funciones de HASH implícitas en SQL, para mi caso utilizo: SELECT SHA512("Cadena") AS SHA512 El valor devuelto lo guardo en la tabla de usuarios que después utilizaré para verificar que sea el mismo password. Saludos
|
||||
javier.mil
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Colaborador Unido: 10/Agosto/2005 Localización: España Estado: Sin conexión Puntos: 4830 |
Enviado: 11/Agosto/2020 a las 22:59 | |||
Buenas , pero usar un HASH512 para encriptar passwords y guardarlos en un Tabla la Access ???..... me parece un poco excesivo ,......... pero vamos esa es un opinión muy personal,....... cualquiera (con un poco conocimiento) desde fuera (externamente) puede colocar en tu tabla de Access un usuario con su correspondiente password hasheado ..... y tendría acceso a tu base ........ solo necesitan saber que usas HASH512 para tener éxito .......
|
||||
thrall
Nuevo Unido: 04/Agosto/2020 Localización: mexico Estado: Sin conexión Puntos: 21 |
Enviado: 11/Agosto/2020 a las 23:43 | |||
Javier.mil, estoy totalmente de acuerdo contigo al respecto de que cualquiera con un poco de conocimiento y sabiendo que se utiliza un password cifrado con HASH512 o 256 o MD5 puede colocar un usuario que cumpla con las condiciones requeridas.
Sin embargo, la idea detrás de poner un HASH es no tener el password plano en una tabla. Se que tal vez sea excesivo y no sea lo más adecuado tener los usuarios en la misma BD que los datos, pero como la base no va a estar en un entorno LAN solo LOCAL se pensó en esta solución, que bien se pudo crear incluso una función que hiciera solo un SHIFT de caracteres y listo. Agradezco enormemente tu comentario, el cual tomaré muy en cuenta para próximos desarrollos. Saludos.
|
||||
javier.mil
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Colaborador Unido: 10/Agosto/2005 Localización: España Estado: Sin conexión Puntos: 4830 |
Enviado: 12/Agosto/2020 a las 09:31 | |||
A ver prueba a ver si es esto lo que necesitas , el codigo es prácticamente el mismo pero creo que funciona sin necesidad de tener .Net Framework 3.5 instalado Private Sub KK() Debug.Print funSHA512("Hola Mundo") MsgBox funSHA512("Hola Mundo"), vbInformation, "SHA512 by javier.mil" MsgBox "Fin" End Sub Public Function funSHA512(PonCadena As String) As String Dim objText As Object Dim objSHA512 As Object Dim arrTextToHash() As Byte Dim arrbytes() As Byte Set objText = CreateObject("System.Text.UTF8Encoding") Set objSHA512 = CreateObject("System.Security.Cryptography.SHA512Managed") arrTextToHash = objText.GetBytes_4(PonCadena) arrbytes = objSHA512.ComputeHash_2((arrTextToHash)) funSHA512 = UCase(funConvToHexString(arrbytes)) Close_Local: Set objText = Nothing Set objSHA512 = Nothing End Function Public Function funConvToHexString(PonBin As Variant) As Variant On Error Resume Next Dim objDom As Object Set objDom = CreateObject("MSXML2.DOMDocument.6.0") With objDom .loadXML "<root />" .documentElement.DataType = "bin.Hex" ' << SHA512 .documentElement.nodeTypedValue = PonBin End With funConvToHexString = Replace(objDom.documentElement.text, vbLf, "") Close_Local: Set objDom = Nothing End Function pruebalo y ya contaras ,....... Editado por javier.mil - 12/Agosto/2020 a las 09:45 |
||||
javier.mil
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Colaborador Unido: 10/Agosto/2005 Localización: España Estado: Sin conexión Puntos: 4830 |
Enviado: 12/Agosto/2020 a las 10:08 | |||
Ahhh creo que si utilizas tu codigo deberia cambiar
Si esta a True codifica a Base64 Si esta a False Hashea a Hash512 |
||||
lbauluz
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 29/Marzo/2005 Localización: La Gloria Estado: Sin conexión Puntos: 3861 |
Enviado: 12/Agosto/2020 a las 14:50 | |||
Y ¿por qué no añadir a la cadena de la clave del usuario otra "clave fija" y después encriptarlo?
Así, cualquiera que no conozca esa clave fija no podrá añadir nada a la tabla... o podrá añadir, pero no le funcionará, que es de lo que se trata Es decir si mi clave es 1234 y la clave fija es qwerty lo que tengo que hacer es juntarlas en 1234qwert y encriptar. Luis
|
||||
El Búho es un pajarraco
|
||||
guarracuco
Moderador Unido: 24/Abril/2004 Localización: EEUU Estado: Sin conexión Puntos: 3239 |
Enviado: 13/Agosto/2020 a las 23:50 | |||
Ibauluz, hace un par de años o más, plantee un reto de hackear cuentas de usuario, aplicando lo que indicas. En mi caso utilizaba 3 columnas del usuario para llenar otra con MD5, la cual es comparada al iniciar sesión el usuario. Un proceso al inicio de sesión recrea el token y lo compara con el almacenado para el usuario. Es decir, con la tabla de usuario a la vista, por más que copies la clave o el token del admin y lo pegues en otro usuario, te va a pasar la prueba en el proceso de login. Un proceso se puede disparar regularmente para ubicar incongruencias.
|
||||
Responder | |
Tweet
|
Ir al foro | Permisos de foro Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |