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 Temas de Hoy

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 11: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.040
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
Respuesta



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 13:02:34
Encriptación con AES en Delphi 7 nlsgarcia Varios 3 01-09-2011 07:36:20
Encriptacion MD5+RSA en delphi jourdan OOP 9 24-03-2010 01:01:08
encriptación con php waremovil PHP 2 14-01-2009 09:04:45
Encriptación Novás PHP 1 12-06-2007 05:24:45


La franja horaria es GMT +2. Ahora son las 11:58:42.


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