Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Delphi para la web
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-12-2015
Reasen Reasen is offline
Miembro
NULL
 
Registrado: dic 2015
Ubicación: Barcelona
Posts: 140
Poder: 9
Reasen Va por buen camino
Problema con encriptación php <-> Delphi

Buenas, tengo el siguiente problema: hice un algoritmo apartir de XOR en delphi y php pero por alguna razon los datos me llegan corruptos y no veo ninguna falla, soy un poco nuevo en PHP, cualquier ayuda me serviria.

Aqui el codigo delphi:

Código Delphi [-]
Function xorPHP(Text: AnsiString; Pass: AnsiString): AnsiString;
var
  i, p: integer;
  Res: AnsiString;
begin
  p := 1;

  for i := 1 to length(Text) do
  begin
    Res := Res + ansichar(ord(Text[i]) XOR ord(Pass[p]));
    Inc(p);
    if p > length(Pass) then
      p := 1;
  end;
  setlength(result, length(Res));
  result := EncodeBase64(BytesOf(result), length(BytesOf(result)));
end;
PHP:
Código PHP:
function DecryptStr2($str,$key)
  {
$p=1;

$key_length strlen($key);
$encoded_data base64_decode($str);

$length strlen($encoded_data);
for (
$i 0$i $length$i++) {

$result .= chr(ord($encoded_data[i]) ^ ord($key[$p]));
$p++;
if (
$key_length){$p=1;} 

}
 return 
$result;
}

    } 

Última edición por Casimiro Notevi fecha: 29-12-2015 a las 12:06:07.
Responder Con Cita
  #2  
Antiguo 29-12-2015
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Creo haber encontrado el problema:

Has olvidado que PHP empieza a contar las listas y cadenas desde 0 (cero), no desde 1 (uno) como hace Pascal. Además, si te fijas, $i empieza en cero mientras que $p lo hace en uno.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 29-12-2015
Reasen Reasen is offline
Miembro
NULL
 
Registrado: dic 2015
Ubicación: Barcelona
Posts: 140
Poder: 9
Reasen Va por buen camino
Bastante extraño la verdad hice los cambios que me digiste y sigo teniendo problemas similares,
los datos se devuelven corruptos o se devuelven parcialmente,
solo ando buscando un sistema de encriptacion basico con clave para delphi <-> php,
si alguien me puede dar un ejemplo me seria de ayuda ya que no encuentro nada en la red que sirva correctamente
Responder Con Cita
  #4  
Antiguo 29-12-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Reasen Ver Mensaje
Bastante extraño la verdad hice los cambios que me digiste y sigo teniendo problemas similares,
los datos se devuelven corruptos o se devuelven parcialmente,
Copia el código para que veamos qué has hecho exactamente.
Responder Con Cita
  #5  
Antiguo 29-12-2015
Reasen Reasen is offline
Miembro
NULL
 
Registrado: dic 2015
Ubicación: Barcelona
Posts: 140
Poder: 9
Reasen Va por buen camino
Este es basicamente

Parte PHP:
Código PHP:
function DecryptStr2($str,$key)
  {
$p=1;

$key_length strlen($key);
$encoded_data base64_decode($str);
 
$length strlen($encoded_data);
for (
$i 1$i $length$i++) {

$result .= chr(ord($encoded_data[i]) ^ ord($key[$p]));
$p++;
if (
$key_length){$p=1;}

}
 return 
$result;
}

$input=$_POST['input'];
echo   
DecryptStr2($input,'ClavePrivada'); 
Parte Delphi:

Código Delphi [-]

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, httpsend, Synacode,
  Vcl.StdCtrls,IdHash,EncdDecd;

Function xorPHP(Text: AnsiString; Pass: AnsiString): AnsiString;
var
  i, p: integer;
  Res: AnsiString;
begin
  p := 1;

  for i := 1 to length(Text) do
  begin
    Res := Res + ansichar(ord(Text[i]) XOR ord(Pass[p]));
    Inc(p);
    if p > length(Pass) then
      p := 1;
  end;
  setlength(result, length(Res));
  result := EncodeBase64(BytesOf(result), length(BytesOf(result)));
end;

function StreamToString(const Stream: TStream): string;
var
  StringBytes: TBytes;
  Encoding: TEncoding;
begin
  Stream.Position := 0;
  SetLength(StringBytes, Stream.Size);
  Stream.ReadBuffer(StringBytes, Stream.Size);
  Result := Encoding.UTF8.GetString(StringBytes);
end;


procedure TForm2.Button1Click(Sender: TObject);
var
  Response: TMemoryStream;
  Key: ansistring;
begin

  Response := TMemoryStream.Create;


   if HttpPostURL('127.0.0.1/test2.php', 'input='+xorPHP('Texto de prueba','ClavePrivada'), Response) then
   showmessage(StreamToString(response));


end;
Responder Con Cita
  #6  
Antiguo 29-12-2015
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 11
bucanero Va camino a la fama
Hola,

basicamente en la función DELPHI esta linea asigna el valor de result, cuando no tiene aun nada guardado

Código Delphi [-]
result := EncodeBase64(BytesOf(result), length(BytesOf(result)));

sustituyela por esta otra

Código Delphi [-]
  result := EncodeBase64(BytesOf(Res), length(BytesOf(Res)));

y la funcion PHP en algunas variables no estaba el $ de variable, y los indices en PHP empiezan en 0. Te dejo la función completa ya corregida
Código PHP:
function DecryptStr2($str,$key) {
  
$p=0;
  
$result '';

  
$key_length strlen($key);
  
$encoded_data base64_decode($str);
 
  
$length strlen($encoded_data);
  for (
$i 0$i $length$i++) {

    
$result .= chr(ord($encoded_data[$i]) ^ ord($key[$p]));
    
$p++;
    if (
$p >= $key_length) {
      
$p=0;
    }
  }
  return 
$result;

con esto ya creo que funciona bien,

Un saludo
Responder Con Cita
  #7  
Antiguo 29-12-2015
Reasen Reasen is offline
Miembro
NULL
 
Registrado: dic 2015
Ubicación: Barcelona
Posts: 140
Poder: 9
Reasen Va por buen camino
Cita:
Empezado por bucanero Ver Mensaje
Hola,

basicamente en la función DELPHI esta linea asigna el valor de result, cuando no tiene aun nada guardado

Código Delphi [-]result := EncodeBase64(BytesOf(result), length(BytesOf(result)));


sustituyela por esta otra

Código Delphi [-] result := EncodeBase64(BytesOf(Res), length(BytesOf(Res)));


y la funcion PHP en algunas variables no estaba el $ de variable, y los indices en PHP empiezan en 0. Te dejo la función completa ya corregida
Código PHP:
function DecryptStr2($str,$key) {
  
$p=0;
  
$result '';

  
$key_length strlen($key);
  
$encoded_data base64_decode($str);
 
  
$length strlen($encoded_data);
  for (
$i 0$i $length$i++) {

    
$result .= chr(ord($encoded_data[$i]) ^ ord($key[$p]));
    
$p++;
    if (
$p >= $key_length) {
      
$p=0;
    }
  }
  return 
$result;

con esto ya creo que funciona bien,

Un saludo
Me solucionaste el dia! Aparte ya me quedo claro que con PHP tengo que empezar por 0 a contar envez de 1, gracias!
en delphi me hice el lio con setlength ya que no sabia ya ni de donde venia el fallo cambie esa funcion que anteriormente estaba bien jajaja
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Utilizar modulo encriptacion en Delphi Toni C++ Builder 22 30-07-2012 14:02:34
Encriptación con AES en Delphi 7 nlsgarcia Varios 3 01-09-2011 08:36:20
Encriptacion MD5+RSA en delphi jourdan OOP 9 24-03-2010 02:01:08
encriptación con php waremovil PHP 2 14-01-2009 10:04:45
Encriptación Novás PHP 1 12-06-2007 06:24:45


La franja horaria es GMT +2. Ahora son las 16:55:36.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi