Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-11-2007
Novás Novás is offline
Miembro
 
Registrado: oct 2003
Ubicación: Galicia
Posts: 146
Poder: 21
Novás Va por buen camino
Pasar string a byte

Hola a todos, mi problemilla es el siguiente:

Tengo declaradas estas dos constantes:

Código Delphi [-]
const
  clave_xor='12345678B12345678***';
  pal_sec_ofuscada='78;52;72;72;41;76;46;12;74;0B;59;70;85;AA;77;00;0F;1A;BB;69';

Ahora debo convertir estas dos palabras a bytes para luego efectuar una operación xor a nivel de bytes y, una vez hecho esto debo regresar el resultado
a un string.

El problemas es que no se como, alguien podría ayudarme. Muchísimas gracias
__________________
Hay dos cosas infinitas: el Universo y la estupidez humana. http://www.cybertarjetas.net
Responder Con Cita
  #2  
Antiguo 26-11-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por Novás Ver Mensaje
Hola a todos, mi problemilla es el siguiente:

Tengo declaradas estas dos constantes:

Código Delphi [-]
const
  clave_xor='12345678B12345678***';
  pal_sec_ofuscada='78;52;72;72;41;76;46;12;74;0B;59;70;85;AA;77;00;0F;1A;BB;69';

Ahora debo convertir estas dos palabras a bytes para luego efectuar una operación xor a nivel de bytes y, una vez hecho esto debo regresar el resultado
a un string.

El problemas es que no se como, alguien podría ayudarme. Muchísimas gracias
Tengo una pregunta, como es que quieres hacer la operación, mezclando las dos constantes, cada constante por separado, no entiendo que quieres hacer.

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #3  
Antiguo 27-11-2007
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 21
Mick Va por buen camino
Cita:
Empezado por Novás Ver Mensaje
Código Delphi [-]
const
  clave_xor='12345678B12345678***';
 pal_sec_ofuscada='78;52;72;72;41;76;46;12;74;0B;59;70;85;AA;77;00;0F;1A;BB;69';
En el caso de clave_xor, ya esta en forma de bytes no hay que hacer nada especial.
No queda completamente claro el caso de pal_sec_ofuscada, supondre que cada 2 digitos entre comas representaria un byte en hexadecimal, como son constantes lo mas sencillo es directamente ponerlo en forma de bytes quedando asi.

Código Delphi [-]
const
  clave_xor= '12345678B12345678***';
  pal_sec_ofuscada= #$78#$52#$72#$72#$41#$76#$46#$12#$74#$0B#$59#$70#$85#$AA#$77#$00#$0F#$1A#$BB#$69;

Ahora para encriptar/desencriptar la palabra secreta con la clave, un bucle con un XOR, que seria algo parecido a esto (codigo sin probar):

Código Delphi [-]
function CryptXOR(const str,key:string):string;
var
 i:integer;
begin
 SetLength(Result, length(str));
 for i:=1 to length(str) do begin
     Result[i]:= Chr( Ord(str[i]) XOR Ord(key[((i-1) mod length(key))+1 ]) );
 end;
end;

// Y llamamos asi:

Resultado:= CryptXOR(pal_sec_ofuscada, clave_xor);

Saludos
Responder Con Cita
  #4  
Antiguo 27-11-2007
Avatar de marceloalegre
[marceloalegre] marceloalegre is offline
Miembro Premium
 
Registrado: abr 2005
Ubicación: Mar del Plata - Argentina
Posts: 448
Poder: 20
marceloalegre Va por buen camino
Post Val

Buenos Días:
No me he puesto a analizar puntualmente tu problematica, pero para poder convertir un string a byte puedes usar esto:

Código Delphi [-]
          Val(ElString, ELByte, ErrorCode);

espero te sea util.

Saludos.
__________________
Saludos.

Marcelo D. Alegre
Responder Con Cita
  #5  
Antiguo 27-11-2007
Novás Novás is offline
Miembro
 
Registrado: oct 2003
Ubicación: Galicia
Posts: 146
Poder: 21
Novás Va por buen camino
Realmente lo que necesito es traducir esta función de php a delphi
Código PHP:
<?
$pal_sec_ofuscada 
"5D;7F;0A;27;09;0D;25;5D;04;01;0B;00;06;01;00;70;06;1C;19;19";
$clave_xor "eH2dJ9gkB82915026***";

$cad1_0 "0";
$cad2_0 "00";
$cad3_0 "000";
$cad4_0 "0000";
$cad5_0 "00000";
$cad6_0 "000000";
$cad7_0 "0000000";
$cad8_0 "00000000";
$pal_sec "";

$valor rand (099);
$id_trans date("mdHis").$valor;
$localizador="1234567890";
$numtarjeta=$_POST["bbva_number"];
$fechacad="20" $_POST["bbva_expires"];
$importe $_POST["card_total"];
$trozos explode (";"$pal_sec_ofuscada);
$tope count($trozos);

for (
$i=0$i<$tope $i++)
{
    
$res "";
    
$pal_sec_ofus_bytes[$i] = decbin(hexdec($trozos[$i]));    
    if (
strlen($pal_sec_ofus_bytes[$i]) == 7){ $pal_sec_ofus_bytes[$i] = $cad1_0.$pal_sec_ofus_bytes[$i]; }    
    if (
strlen($pal_sec_ofus_bytes[$i]) == 6){ $pal_sec_ofus_bytes[$i] = $cad2_0.$pal_sec_ofus_bytes[$i]; }
    if (
strlen($pal_sec_ofus_bytes[$i]) == 5){ $pal_sec_ofus_bytes[$i] = $cad3_0.$pal_sec_ofus_bytes[$i]; }
    if (
strlen($pal_sec_ofus_bytes[$i]) == 4){ $pal_sec_ofus_bytes[$i] = $cad4_0.$pal_sec_ofus_bytes[$i]; }
    if (
strlen($pal_sec_ofus_bytes[$i]) == 3){ $pal_sec_ofus_bytes[$i] = $cad5_0.$pal_sec_ofus_bytes[$i]; }
    if (
strlen($pal_sec_ofus_bytes[$i]) == 2){ $pal_sec_ofus_bytes[$i] = $cad6_0.$pal_sec_ofus_bytes[$i]; }
    if (
strlen($pal_sec_ofus_bytes[$i]) == 1){ $pal_sec_ofus_bytes[$i] = $cad7_0.$pal_sec_ofus_bytes[$i]; }
    
$pal_sec_xor_bytes[$i] = decbin(ord($clave_xor[$i]));
    if (
strlen($pal_sec_xor_bytes[$i]) == 7){ $pal_sec_xor_bytes[$i] = $cad1_0.$pal_sec_xor_bytes[$i]; }
    if (
strlen($pal_sec_xor_bytes[$i]) == 6){ $pal_sec_xor_bytes[$i] = $cad2_0.$pal_sec_xor_bytes[$i]; }
    if (
strlen($pal_sec_xor_bytes[$i]) == 5){ $pal_sec_xor_bytes[$i] = $cad3_0.$pal_sec_xor_bytes[$i]; }
    if (
strlen($pal_sec_xor_bytes[$i]) == 4){ $pal_sec_xor_bytes[$i] = $cad4_0.$pal_sec_xor_bytes[$i]; }
    if (
strlen($pal_sec_xor_bytes[$i]) == 3){ $pal_sec_xor_bytes[$i] = $cad5_0.$pal_sec_xor_bytes[$i]; }
    if (
strlen($pal_sec_xor_bytes[$i]) == 2){ $pal_sec_xor_bytes[$i] = $cad6_0.$pal_sec_xor_bytes[$i]; }
    if (
strlen($pal_sec_xor_bytes[$i]) == 1){ $pal_sec_xor_bytes[$i] = $cad7_0.$pal_sec_xor_bytes[$i]; }
    for (
$j=0$j<8$j++)
    {
        (string)
$res .= (int)$pal_sec_ofus_bytes[$i][$j] ^ (int)$pal_sec_xor_bytes[$i][$j];
    }
    
$xor[$i] = $res;
    
$pal_sec .= chr(bindec($xor[$i]));
}
__________________
Hay dos cosas infinitas: el Universo y la estupidez humana. http://www.cybertarjetas.net
Responder Con Cita
  #6  
Antiguo 27-11-2007
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 21
Mick Va por buen camino
Ese parece el codigo fuente que suministra el banco ahi indicado, cuando se contrata con ellos su tpv virtual, sino recuerdo mal (hace varios años que implemente ese sistema) todos los mails, documentacion y codigo recibido del banco era confidencial. No se si han cambiado de politica y ese codigo se puede publicar actualmente, en todo caso sugiero que te asegures si puedes publicarlo y si no es asi, yo borraria el codigo fuente que muestras en ese mensaje.

Saludos
Responder Con Cita
  #7  
Antiguo 27-11-2007
Novás Novás is offline
Miembro
 
Registrado: oct 2003
Ubicación: Galicia
Posts: 146
Poder: 21
Novás Va por buen camino
Un saludo a todos, ante la respuesta de nuestro compañero Mick, he llamado con urgencia al servicio de atención al cliente de dicho banco y me han dicho que no hay ningún problema por publicar ese código ya que lo importante son la palabra secreta, el código_xor y la firma sacada a partir del algoritmo sha1 (todo ello único) además de otro sinfín de procedimientos en materia de seguridad que no voy a detallar aquí.
Por lo tanto puedo mantener el código.

De todas formas gracias Mick porque a mi ni se me había ocurrido esa posibilidad.

PD.
Agradezco cualquier tipo de ayuda en la traducción de dicho código. Nunca he trabajado en php (se queda como promesa de año nuevo) y no dispongo del tiempo necesario para ponerme al día y lograr traducirlo.
__________________
Hay dos cosas infinitas: el Universo y la estupidez humana. http://www.cybertarjetas.net
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
Pasar TMemorystream a string modulay OOP 4 29-09-2007 22:23:48
Pasar string a char Sayuri Varios 3 09-08-2005 16:35:29
Pasar de string a float joanajj Varios 3 04-11-2004 20:29:30
de BYTE a STRING emeceuy Varios 3 20-08-2004 16:29:32
ADO: Byte nulo (byte #0) en un string Pandre Conexión con bases de datos 0 02-04-2004 20:18:37


La franja horaria es GMT +2. Ahora son las 01:52:08.


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