Ver Mensaje Individual
  #1  
Antiguo 21-06-2016
0x90 0x90 is offline
Registrado
NULL
 
Registrado: jun 2016
Posts: 5
Reputación: 0
0x90 Va por buen camino
Question Manejo de PWideString a Byte Array?

Saludos!

Llevo desde varios dias (3 para ser exacto) con una situacion demaciada problematica (o al menos para mi) la cual intento realizar para una aplicacion que estoy haciendo.

La aplicacion toma los datos del segundo parametro de las funciones send() y recv() del winsock y la lee, la data esta encriptada con un algoritmo que yo se manejar, y he hecho una funcion que me permite decifrar los paquetes que recibo.

Dicha funcion toma un parametro tipo array of byte el cual puedo definir y inicializar de la siguiente manera:

Código Delphi [-]
const
  Ejemplo: Array[0..17] of Byte = ($65, $73, $74, $6F, $20, $65, $73, $20, $75, $6E, $20, $65, $6A, $65, $6D, $70, $6C, $6F);

Aqui mi funcion utilizada para cifrar/decifrar paquetes:

Código Delphi [-]
<...>

type
  ReturnArray = array of byte;

<...>

function Crypt(Packet: array of Byte): ReturnArray;
var
  I: Integer;
  HashPointer: integer;
  Decrypt: ReturnArray;
begin
     SetLength(Decrypt, Length(Packet));
     HashPointer := 0;

     for I := 0 to Length(Packet) do
     begin
          Decrypt[i] := Byte(Packet[i] Xor (HashTable_A[HashPointer]) Xor (HashTable_B[HashPointer]));
          HashPointer := ((HashPointer + 1) Mod 255);
     end;
  Result := Decrypt;
end;

Nota Aclaratoria: la HashTable_A y HashTable_B las tengo definidas en la seccion de declaracion de variables que tengo arriva del codigo, hasta el momento no veo necesario el compartirlas asi que por eso no las pongo, si es necesaria, solo pedid y se os dara

Como ven dicha funcion trabaja perfectamente bien con una Array of Bytes estatica, ahora, mi idea era originalmente tomar el buffer del send() y recv() y manejarlo hasta que quedara una Byte Array para asi poder entonces pasar la data del buffer a la funcion de Crypt y asi poder realizar exitosamente la funcion.

Mi otra idea seria modificar la funcion Crypt, y hacerla que en vez de que accepte un array of byte, que entonces accepte directamente un PWideString (PChar) que es donde el buffer se encuentra osea un puntero a char.

Ahora entendiendo esto, mi problema se encuentra en que no se como implementar estas dos cosas que he explicado, He tratado de hacer varias conversiones pero ninguna trabaja, y escencialmente la raiz de todo esta en que necesito O convertir de PChar a Array of Byte o modificar la funcion Crypt... Como podria yo hacer dicha implementacion, si no de una, pues de la otra.

He aqui una de las funciones que he tratado de hacer usar con la implementacio pero no logro completar mi mision:

ConvertDataToByteArray
pastebin.com/3iuXbwKX (Esta es la mas cercana que tengo para completar lo que quiero, pero asi mismo me sigue fallando)

PD. Disculpen si algunos pudiera molestarles como trabaje la gramatica en mi texto, es que aunque mi lenguaje materno es el español, lo mas que hablo y escribo es el Ingles, ya que vivo en los Estados Unidos espero sean entendidos.
Responder Con Cita