Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Login con Password HASHBYTES MD5 [SQL Server]

Estas en el tema de Login con Password HASHBYTES MD5 [SQL Server] en el foro de PHP en Foros del Web. Saludos terrícolas! Desde hace tiempo he estado buscando forma de realizar un login con datos almacenados en una tabla SQL Server. El campo de contraseña ...
  #1 (permalink)  
Antiguo 26/07/2012, 10:03
Avatar de Erick_Lucas  
Fecha de Ingreso: enero-2009
Ubicación: Manta
Mensajes: 47
Antigüedad: 15 años, 3 meses
Puntos: 1
Login con Password HASHBYTES MD5 [SQL Server]

Saludos terrícolas!

Desde hace tiempo he estado buscando forma de realizar un login con datos almacenados en una tabla SQL Server.

El campo de contraseña está encriptado con HASHBYTES en MD5. He visto forma de utilizar métodos que puedan "desencriptar" la clave para loguearse en Visual Basic .NET, C# y en JAVA inclusive. Pero en PHP no he tenido suerte. He llegado a pensar que es por la inferencia de tipos que existe.

Algunos de Uds. ha logrado hacerlo o conoce más del tema?

Gracias desde ya
  #2 (permalink)  
Antiguo 26/07/2012, 10:14
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Login con Password HASHBYTES MD5 [SQL Server]

A ver, aquí el punto no se trata de "desencriptar" la clave para comparar la contraseña.

La técnica consiste en "encriptar" la contraseña que provee el usuario al momento de hacer login y compararla con la versión en la BD, así de simple.

¿De verdad creías que se tenía que hacer ingeniería inversa con la contraseña en la BD?

Eso gastaría recursos siempre, pienso que lo que viste en VB, .NET, C# y JAVA te ha confundido.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 26/07/2012, 10:59
Avatar de Erick_Lucas  
Fecha de Ingreso: enero-2009
Ubicación: Manta
Mensajes: 47
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Login con Password HASHBYTES MD5 [SQL Server]

Cita:
Iniciado por pateketrueke Ver Mensaje
A ver, aquí el punto no se trata de "desencriptar" la clave para comparar la contraseña.
Acaso piensas que el uso de las comillas que le dí a la palabra desencriptar es porque me dió la gana? No hombre, estoy conciente de que no funciona así.

Cita:
Iniciado por pateketrueke Ver Mensaje
La técnica consiste en "encriptar" la contraseña que provee el usuario al momento de hacer login y compararla con la versión en la BD, así de simple.
Es precisamente lo que vi en Visual Basic .NET y después codifiqué en C# y en JAVA. Pero tengo el inconveniente de que transfiero el código a PHP y los resultados no son los mismos. Habrá forma de conseguir la encriptación correcta ?
  #4 (permalink)  
Antiguo 26/07/2012, 11:04
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Login con Password HASHBYTES MD5 [SQL Server]

Ahhhh, pues con esto último que nos dices se complementa lo que no quedaba claro.

Bien... pues sin ver cómo lo haces exactamente así como las especificaciones de la columna en la BD es complicado adivinar las causas.

PDTA: lo de las comillas es porque en realidad MD5 no es un algoritmo de "encriptado" sino de hashing, que no es lo mismo.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 26/07/2012, 11:41
Avatar de Erick_Lucas  
Fecha de Ingreso: enero-2009
Ubicación: Manta
Mensajes: 47
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Login con Password HASHBYTES MD5 [SQL Server]

Cita:
Iniciado por pateketrueke Ver Mensaje
Lo de las comillas es porque en realidad MD5 no es un algoritmo de "encriptado" sino de hashing, que no es lo mismo.
Te tomo la palabra, pues ahí era donde yo estaba equivocado. Gracias por la aclaración.

Cita:
Iniciado por pateketrueke Ver Mensaje
Bien... pues sin ver cómo lo haces exactamente así como las especificaciones de la columna en la BD es complicado adivinar las causas.
Continúo:

Reproduje un código (muy feo, en mi opinión) hecho en Visual Basic .NET el cual muestro a continuación:

Código VB:
Ver original
  1. Public Function Encripta(ByVal cText As String)
  2.           Dim CLen
  3.           Dim cEncriptada As String = ""
  4.           Dim nChar As Integer
  5.           Dim i
  6.           CLen = Len(cText)
  7.           cText = RTrim(cText)
  8.           For i = 1 To Len(cText)
  9.                nChar = Asc(Mid(cText, i, 1))
  10.                If Not nChar = Asc(" ") Then
  11.                     nChar = nChar - (40 - i)
  12.                End If
  13.                If nChar <= 0 Then
  14.                     nChar = 255 + nChar
  15.                End If
  16.                cEncriptada = Chr(nChar) & cEncriptada
  17.           Next
  18.           cEncriptada = cEncriptada + Space(CLen - Len(cEncriptada))
  19.           Encripta = cEncriptada
  20. End Function

Pude haberlo mejorado (e inclusive comentado) en este mismo lenguaje, pero se me asignó hacer un sistema con C#, así que fue ahi donde lo transformé y funcionó:

Código C#:
Ver original
  1. private string Encriptacion(string texto)
  2. {
  3.           int tamanio = 0;
  4.           string clave = "";
  5.           int caracter = 0;
  6.           texto = texto.Trim();
  7.           tamanio = texto.Length;
  8.           for (int i = 1; i <= tamanio; i++)
  9.           {
  10.                caracter = (int)Convert.ToChar(texto.Substring(i-1,1));
  11.                if (!(caracter == Asc(" ")))
  12.                {
  13.                     caracter = caracter - (40 - i);
  14.                }
  15.                if (caracter <= 0)
  16.                {
  17.                     caracter = 255 + caracter;
  18.                }
  19.                clave = Convert.ToChar(caracter) + clave;
  20.           }
  21.           return clave;
  22. }

Tiempo después volví a tener la necesidad de implementar el mismo método, pero ahora en JAVA, y también lo conseguí:

Código JAVA:
Ver original
  1. private String Encriptacion(String texto)   {
  2.           int tamanio = 0;
  3.           String clave = "";
  4.           int caracter = 0;
  5.           texto = texto.trim();
  6.           tamanio = texto.length();
  7.           for (int i = 1; i <= tamanio; i++) {
  8.                caracter = (int)texto.charAt(i-1);
  9.                if (!(caracter == (int)" ".charAt(0))) {
  10.                     caracter = caracter - (40 - i);
  11.                }
  12.                if (caracter <= 0) {
  13.                     caracter = 255 + caracter;
  14.                }
  15.                clave = (char)caracter + clave;
  16.           }
  17.           return clave;
  18. }

Pero cuando lo llevé a PHP, no tuve la misma suerte:

Código PHP:
Ver original
  1. public function validarContrasenia($password)
  2. {
  3.       $tamanio = 0;
  4.       $clave = "";
  5.       $caracter = 0;
  6.       $password = trim($password);
  7.       $tamanio = strlen($password);
  8.       for ($i=1;$i<=$tamanio;$i++)
  9.       {
  10.            $caracter = ord(substr($password,$i-1));
  11.            if   (!($caracter == ord(" ")))
  12.            {
  13.                 $caracter = $caracter - (40 - $i);
  14.            }
  15.            if   ($caracter <= 0)
  16.            {
  17.                 $caracter = 255 + $caracter;
  18.            }
  19.            $clave = chr($caracter) + $clave;
  20.           }
  21.       return $clave;
  22. }

Sigo creyendo que puede tratarse de la inferencia de tipos que posee el lenguaje. Alguna otra persectiva ?
  #6 (permalink)  
Antiguo 26/07/2012, 11:53
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Login con Password HASHBYTES MD5 [SQL Server]

¿Puedes explicar que es lo que tratas de hacer?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 26/07/2012, 12:01
Avatar de Erick_Lucas  
Fecha de Ingreso: enero-2009
Ubicación: Manta
Mensajes: 47
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Login con Password HASHBYTES MD5 [SQL Server]

Jajajajajaja sabía que obtendría una respuesta como esa

Todos aquellos métodos son los mismos pero en diferente lenguaje (aunque en PHP todavía no funciona), se observa que reciben un parámetro String que no es otra cosa que el valor que estará en un campo de texto en donde el usuario insertará la contraseña.

El método realiza la encriptación y compará con lo que se encuentre en la columna del PASSWORD de la base de datos. Si es igual, el login será correcto, si no, no lo será.

Recuerdo que esa columna tiene datos HAShBYTES pero el tipo de dato es CHAR.
  #8 (permalink)  
Antiguo 26/07/2012, 12:31
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 2 meses
Puntos: 155
Respuesta: Login con Password HASHBYTES MD5 [SQL Server]

ojo ve la linea de java

Código:
/*aqui segun yo estas casteando y concatenando  */
clave = (char)caracter + clave;

ve la linea de php
Código PHP:
Ver original
  1. /*aqui le asignas un valor ascii y se lo sumas a clave que es vacio osease clave segun yo debe valer 0*/
  2.  $clave = chr($caracter) + $clave;


una cadena en php se puede recorrer como arreglo

Código PHP:
$cadena="algo";
echo 
$cadena[2];
#te debe devolver una g 

algo de documentación

http://mx2.php.net/manual/es/language.types.string.php
http://php.net/manual/es/language.ty...e-juggling.php


pero pos si ve tu a saber que quieres hacer
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo

Última edición por mogurbon; 26/07/2012 a las 12:38
  #9 (permalink)  
Antiguo 26/07/2012, 15:21
Avatar de Erick_Lucas  
Fecha de Ingreso: enero-2009
Ubicación: Manta
Mensajes: 47
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Login con Password HASHBYTES MD5 [SQL Server]

Ambas líneas son exactamnte iguales, eso lo comprobé antes. El problema debe estar por otra parte, lo que me sorprende es que no entiendan a lo que me refiero.

Busco realizar el mismo método, funcional en Visual Basic .NET, en C# y en JAVA, pero ahora en PHP. Mismo que me permita encriptar una contraseña HASHBYTES MD5 de SQL Server.
  #10 (permalink)  
Antiguo 26/07/2012, 15:59
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Login con Password HASHBYTES MD5 [SQL Server]

A decir verdad no se a que te refieres con "Hashbytes", y en teoría se entiende que estás traduciendo tu implementación de un lenguaje a otro simplemente.

Deberías ejecutar algunos tests en los lenguajes donde si te funciona, con las mismas cadenas de entrada para todas las pruebas y hacer un diff de los resultados en comparación con lo que te produce php.

Así es esto, no tienes problemas de lógica o sintaxis objetivamente, a menos que nos muestres el RFC para poder basarnos en algo.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 26/07/2012, 16:14
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Login con Password HASHBYTES MD5 [SQL Server]

Estas funciones me generan la misma salida:
Código Java:
Ver original
  1. private String Encriptacion(String texto)   {
  2.     int tamanio = 0;
  3.     String clave = "";
  4.     int caracter = 0;
  5.     texto = texto.trim();
  6.     tamanio = texto.length();
  7.     for (int i = 1; i <= tamanio; i++) {
  8.         caracter = (int)texto.charAt(i-1);
  9.         if (!(caracter == (int)" ".charAt(0))) {
  10.             caracter = caracter - (40 - i);
  11.         }
  12.         if (caracter <= 0) {
  13.             caracter = 255 + caracter;
  14.         }
  15.         clave = (char)caracter + clave;
  16.     }
  17.     return clave;
  18. }
Código PHP:
Ver original
  1. private function Encriptacion($texto)
  2.     {
  3.         $tamanio = 0;
  4.         $clave = "";
  5.         $char = 0;
  6.         $texto = trim($texto);
  7.         $tamanio = strlen($texto);
  8.         for ($i = 1; $i <= $tamanio; $i++) {
  9.             $char = ord($texto[$i - 1]);
  10.             if (!($char == ord(' '))) {
  11.                 $char = ($char - (40 - $i));
  12.             }
  13.             if ($char <= 0) {
  14.                 $char = 255 + $char;
  15.             }
  16.            
  17.             $clave = chr($char) . $clave;
  18.         }
  19.        
  20.         return $clave;
  21.     }

Con este texto:
Código:
Texto de Ejemplo
Me genera estas salidas:
Código:
Java: WSVRIM' EC LPS?-
PHP: WSVRIM' EC LPS?-
Saludos.
  #12 (permalink)  
Antiguo 26/07/2012, 16:22
Avatar de Erick_Lucas  
Fecha de Ingreso: enero-2009
Ubicación: Manta
Mensajes: 47
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Login con Password HASHBYTES MD5 [SQL Server]

Cita:
Iniciado por pateketrueke Ver Mensaje
A decir verdad no se a que te refieres con "Hashbytes"..
Si se desea guardar un dato en SQL Server con algun algoritmo de hashing (como MD5, SHA1, etc.) se utiliza la función llamada HASHBYTES lo cual hace que el dato se almacene como tipo de dato VARBINARY.

Cita:
Iniciado por pateketrueke Ver Mensaje
..en teoría se entiende que estás traduciendo tu implementación de un lenguaje a otro simplemente.
Es exactamente lo que estoy tratando de hacer

Cita:
Iniciado por pateketrueke Ver Mensaje
Deberías ejecutar algunos tests en los lenguajes donde si te funciona, con las mismas cadenas de entrada para todas las pruebas y hacer un diff de los resultados en comparación con lo que te produce php.
Podrias indicarme cmo puedo ejecutar los tests? Entiendo por 'dif' algo relacionado a Control de Versiones (muy probablemente, he de equivocarme).
  #13 (permalink)  
Antiguo 26/07/2012, 17:26
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Login con Password HASHBYTES MD5 [SQL Server]

Pues viendo los resultados de GatorV, que ha hecho unos tests (pruebas), y el diff (diferencias) que muestra es equivalente no veo porque la implementación debería de fallar.

Tal vez el problema lo tienes en otra parte, ¿como saber?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #14 (permalink)  
Antiguo 26/07/2012, 17:50
Avatar de Erick_Lucas  
Fecha de Ingreso: enero-2009
Ubicación: Manta
Mensajes: 47
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Login con Password HASHBYTES MD5 [SQL Server]

Cita:
Iniciado por pateketrueke Ver Mensaje
Tal vez el problema lo tienes en otra parte, ¿como saber?
Algo así como en la interfaz entre el teclado y la silla

Creí imaginar de qué se trataba,a pues en los sistemas que desarrollé en C# y JAVA fueron implementaciones propias, mientras que en PHP estoy ayudándome de un Framework.

Sin embargo, hice un pequeño formulario HTML + PHP en N++ y ni aún así pude obtener el loguin que deseo, así que sigo pensando en la omnipresente (de tanto haberla mencionado) INFERENCIA DE TIPOS DE PHP
  #15 (permalink)  
Antiguo 27/07/2012, 02:46
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Login con Password HASHBYTES MD5 [SQL Server]

Tu fallo está en la concatenación....


Si te fijas, @GatorV lo ha corregido ;)
__________________
>> Eleazan's Source
>> @Eleazan
  #16 (permalink)  
Antiguo 27/07/2012, 03:33
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Login con Password HASHBYTES MD5 [SQL Server]

Cierto, muy cierto.

La implementación si estaba errada, ya que el operador de concatenación en PHP es el punto y no el signo de suma.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #17 (permalink)  
Antiguo 27/07/2012, 07:07
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 2 meses
Puntos: 155
Respuesta: Login con Password HASHBYTES MD5 [SQL Server]

Cita:
Iniciado por Erick_Lucas Ver Mensaje
Ambas líneas son exactamnte iguales, eso lo comprobé antes. El problema debe estar por otra parte, lo que me sorprende es que no entiendan a lo que me refiero.

Busco realizar el mismo método, funcional en Visual Basic .NET, en C# y en JAVA, pero ahora en PHP. Mismo que me permita encriptar una contraseña HASHBYTES MD5 de SQL Server.
a mi no me gusta decir te lo dije pero ...... a no a mi si me gusta , te lo dije

no eran exactamente iguales
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo
  #18 (permalink)  
Antiguo 27/07/2012, 10:35
Avatar de Erick_Lucas  
Fecha de Ingreso: enero-2009
Ubicación: Manta
Mensajes: 47
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Login con Password HASHBYTES MD5 [SQL Server]

Cita:
Iniciado por pateketrueke Ver Mensaje
Cita:
Iniciado por Eleazan Ver Mensaje
Tu fallo está en la concatenación....
Cierto, muy cierto.

La implementación si estaba errada, ya que el operador de concatenación en PHP es el punto y no el signo de suma.
¡¡¡Rasmus Lerdorf!!! Digo... madre del PHP Cómo puedo ser tan mal concatenador???!!! Lo dicho, era la interfaz entre el teclado y la silla.

Bucle infinito de gracias para Uds. señores , he logrado el login desde el pequeño formulario de PHP, aunque en el sistema que uso con el Framework todavía no se da, pero es cosa de revisar más a fondo los procesos de logueo del mismo, cosa que ya quedará a mi cargo.

Saludos cordiales!


Cita:
Iniciado por mogurbon Ver Mensaje
a mi no me gusta decir te lo dije pero ...... a no a mi si me gusta , te lo dije

no eran exactamente iguales
Que bueno que no te gusta Saludos
  #19 (permalink)  
Antiguo 27/07/2012, 12:31
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Login con Password HASHBYTES MD5 [SQL Server]

De hecho la implementación que hice fue propia, no tomé la tuya jeje solo re-escriba el código de Java...

Etiquetas: login, md5, password, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:16.