Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Función en localhost (IIS) funciona bien pero en web (Apache) falla

Estas en el tema de Función en localhost (IIS) funciona bien pero en web (Apache) falla en el foro de PHP en Foros del Web. Buenas tardes, busqué y busqué y no logré encontrar nada. Por eso, hoy en mi primer tema les pido su ayuda. Les describo mi problema: ...
  #1 (permalink)  
Antiguo 09/12/2013, 14:29
 
Fecha de Ingreso: mayo-2011
Ubicación: México
Mensajes: 7
Antigüedad: 13 años, 7 meses
Puntos: 0
Exclamación Función en localhost (IIS) funciona bien pero en web (Apache) falla

Buenas tardes, busqué y busqué y no logré encontrar nada. Por eso, hoy en mi primer tema les pido su ayuda. Les describo mi problema:

En PHP hice un encriptador que (valga la redundancia), encripta una contraseña, cuando la uso localmente (localhost en IIS) funciona correctamente pero al subir la aplicación al sitio web que está en Apache, ésta función falla dándome otros caracteres.

Les cuento:
///////////////Primer parte
La encriptación se hace de la siguiente manera, recibo a través de $_POST la contraseña la cual, la separo caracter a caracter. Después cada caracter lo paso a ASCII, después cada valor ASCII de cada caracter lo paso a binario y finalmente concateno los caracteres convertidos a binario.

////////////Segunda parte
La cadena de caracteres ahora es 000101010111010110010101010 (por dar un ejemplo), ésta si es menor a 80 la agrego 00000000000. Entonces quedaría 0000000000000000000000101010111010110010101010 (tomando en cuenta que son 80 caracteres).

Ahora mi cadena es 0000000000000000000000101010111010110010101010, ésta la separo de 8 en 8 y la paso a hexadecimal con una función que hice.

Este es la última parte del código que convierte el binario (de 8 en 8) a hexadecimal:

Código PHP:
for ($a 0$a <= 9$a++){
    
$cadena_8bits =  substr($clave_encryptada$a*88);
    
$valor_hex bin_to_hex($cadena_8bits);
    
$clave_encryptada_hex $clave_encryptada_hex.$valor_hex;    

//Y aquí muestro la conversión ya concatenada.
$clave_pwd = strtoupper($clave_encryptada_hex);

La función bin_to_hex es la siguiente:

Código PHP:
function bin_to_hex($hex){
    switch (
$hex) {
    case 
"00000000":
        echo 
"00";
        break;
    case 
"00000001":
        echo 
"01";
        break;
    case 
"00000010":
        echo 
"02";
        break;
    case 
"00000011":
        echo 
"03";
        break;
    case 
"00000100":
        echo 
"04";
        break;
//Continua... pero Foros del web no me dejó ponerla completa.
}

Esto es lo que resulta en cada servidor al convertir la palabra "admin":

Apache: 5D7B5DD36DDCD6CF9AB8

IIS: 5D1A5DB76DD0B2CBF3B8

Espero puedan ayudarme y que no se hayan quedado dormidos con el tema tan largo
  #2 (permalink)  
Antiguo 09/12/2013, 23:06
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 7 meses
Puntos: 320
Respuesta: Función en localhost (IIS) funciona bien pero en web (Apache) falla

Existe algo llamado: base_convert

Ademas, ¿De que sirve encriptar asi? cualquiera que sepa el algoritmo o lo deduzca puede desencriptarlo, para tal fin pasalo a base 64 con base64_encode y listo.

para encriptar mejor debes poner clave u otra cosa, algo que no sea parte del algoritmo, eso da seguridad, hace bastante hice esta funciones
Código PHP:
Ver original
  1. <?php
  2.     function Encriptar($Texto , $Clave) {
  3.        $Resultado = '';
  4.        for($Posicion = 0; $Posicion < strlen($Texto); $Posicion++) {
  5.           $Caracter = substr($Texto , $Posicion , 1);
  6.           $CaracterClave = substr($Clave , ($Posicion % strlen($Clave))-1 , 1);
  7.           $Caracter = chr(ord($Caracter)+ord($CaracterClave));
  8.           $Resultado .= $Caracter;
  9.        }
  10.        return base64_encode($Resultado);
  11.     }
  12.  
  13.     function DesEncriptar($Texto , $Clave) {
  14.        $Resultado = '';
  15.        $Texto = base64_decode($Texto);
  16.        for($Posicion = 0; $Posicion < strlen($Texto); $Posicion++) {
  17.           $Caracter = substr($Texto , $Posicion , 1);
  18.           $CaracterClave = substr($Clave, ($Posicion % strlen($Clave))-1, 1);
  19.           $Caracter = chr(ord($Caracter)-ord($CaracterClave));
  20.           $Resultado .= $Caracter;
  21.        }
  22.        return $Resultado;
  23.     }

podrias adaptar tu codigo para que trabaje con una clave y asi hacerlo mas interesante
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #3 (permalink)  
Antiguo 10/12/2013, 09:32
 
Fecha de Ingreso: mayo-2011
Ubicación: México
Mensajes: 7
Antigüedad: 13 años, 7 meses
Puntos: 0
De acuerdo Respuesta: Función en localhost (IIS) funciona bien pero en web (Apache) falla

Emmmm... Tengo una cadena de caracteres como "llave" que después mezclo con la penúltima conversión en binario. En fin, es la "lógica" de encriptación que usan en la compañía pues lo usan para un software cliente-servidor, al cual yo debo conectarme a la BD en SQL Server.

En fin, ojalá alguien pueda ayudarme. De todas maneras, muchas gracias, NSD
  #4 (permalink)  
Antiguo 10/12/2013, 10:31
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Función en localhost (IIS) funciona bien pero en web (Apache) falla

Sin ver todo el código y solo pedazos es difícil ver la razón, pero lo que puedes hacer es tal como separaste los pasos, separar igual el código y debuggear, imprime el resultado de cada paso y compara, así puedes ver exactamente donde falla, y va a ser más fácil que te podamos ayudar.

Saludos.
  #5 (permalink)  
Antiguo 10/12/2013, 10:51
 
Fecha de Ingreso: abril-2003
Ubicación: Mexico
Mensajes: 604
Antigüedad: 21 años, 8 meses
Puntos: 23
Respuesta: Función en localhost (IIS) funciona bien pero en web (Apache) falla

buenas!!

muy independientemente del codigo de programacion aqui por lo que planteas el problema es tú programacion, porque si estuvieras tomando librerias propias del sistema (IIS, Apache) entonces le podriamos hechar la culpa al sistema, no obstante como indicas que tu tienes hecho tu propio "sistema de encriptacion" (mas haya que sea bueno o malo, o bien que haya mejores) entonces se me ocurre que al hacer la migracion de uno a otro servidor has omitido algun script o archivo que te esta provocando la diferencia...

Todo esto lo comento basado en lo que comentas y como dice Gatorv, sin ver mas el codigo o la estructura de funcionamiento es dificil poder ayudar...


Saludos!!
__________________
¡El Respeto al Derecho Ajeno Es la Paz!
  #6 (permalink)  
Antiguo 10/12/2013, 11:12
 
Fecha de Ingreso: mayo-2011
Ubicación: México
Mensajes: 7
Antigüedad: 13 años, 7 meses
Puntos: 0
De acuerdo Respuesta: Función en localhost (IIS) funciona bien pero en web (Apache) falla

Muchas gracias a todos por sus respuestas, creo haber encontrado el error y aquí se los muestro.

Al encriptar la palabra "admin" en disintos servidores, estos fueron los resultados:

Apache local:
5D 1A 5D B7 6D D0 B2 CB F3 B8
(Versión Apache 2.4.7)

IIS local:
5D 1A 5D B7 6D D0 B2 CB F3 B8
(Versión 7.5)

Apache web OTRO:
5D 7B 5D D3 6D DC D6 CF 9A B8
(Versión Apache 2.2.14)

Apache web Mío:
5D 7B 5D D3 6D DC D6 CF 9A B8
(Versión Apache 2.2.14)

Cómo se habrán dado cuenta, el detalle es la versión de cada servidor web.

Saludos y gracias.
  #7 (permalink)  
Antiguo 10/12/2013, 11:15
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Función en localhost (IIS) funciona bien pero en web (Apache) falla

y aún así, sin que hagas debug y veas donde fallá, es complicado arreglarlo
  #8 (permalink)  
Antiguo 10/12/2013, 11:51
 
Fecha de Ingreso: mayo-2011
Ubicación: México
Mensajes: 7
Antigüedad: 13 años, 7 meses
Puntos: 0
De acuerdo Respuesta: Función en localhost (IIS) funciona bien pero en web (Apache) falla

Cita:
Iniciado por GatorV Ver Mensaje
y aún así, sin que hagas debug y veas donde fallá, es complicado arreglarlo
Muchas gracias, debuggear fue lo primero que hice.
  #9 (permalink)  
Antiguo 10/12/2013, 22:04
 
Fecha de Ingreso: abril-2003
Ubicación: Mexico
Mensajes: 604
Antigüedad: 21 años, 8 meses
Puntos: 23
Respuesta: Función en localhost (IIS) funciona bien pero en web (Apache) falla

Entiendo que lo das por "solucionado", pero al menos en mi experiencia una aplicacion o funcion no deberia de verse afectada por la version del sistema que lo ejecuta, puesto que no es confiable.
migrar de una version a otra te provocara problemas de compatibilidad, en mi humilde opinion has encontrado el motivo del "fallo" (diferente resultado), no la solucion
pero si a ti te sirve, ni hablar...

Suerte!!
__________________
¡El Respeto al Derecho Ajeno Es la Paz!

Etiquetas: binario, funcion, hexadecimal
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 14:03.