Ver Mensaje Individual
  #5 (permalink)  
Antiguo 26/07/2012, 11:41
Avatar de Erick_Lucas
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 ?