Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Como enviar mensajes encriptados por Internet (https://www.clubdelphi.com/foros/showthread.php?t=9927)

JDNA 06-05-2004 00:04:41

Como enviar mensajes encriptados por Internet
 
Hola amigos, tengo el siguiente problema, necesito enviar mensajes de tipo alfanumérico por internet pero tienen que estár encriptados. De hecho es un poco simple, tengo una aplicación servidor y cliente que envian y reciven los mensajes:

En el lado del servidor hay algo parecido a esto:

mensaje := AThread.Connection.ReadLn;

mensaje := AlgoritmoEncriptar.Desencriptar(mensaje);

.

MensajeEnviado := AlgoritmoEncriptar.Encriptar(MensajeEnviado);
AThread.Connection.WriteLn(MensajeEnviado);

.

y en el cliente:

with idTCPClient1 do
begin

mensaje := Login + ',' + Password;
enc := AlgoritmoEncriptar.Encriptar(mensaje);
Writeln(enc);
Respuesta := ReadLn;
RespuestaDesencrip := AlgoritmoEncriptar.Desencriptar(Respuesta);

end;



Todo funciona bien hasta que en las cadenas de caracteres encriptados, apareces los caracteres #10 y #13 y según el delphi son para ser utilizados por algunos protocolos de internet cuando se quiere enviar o recibir algún texto con ReadL o WriteLn:



"The optional ATerminator parameter indicates the end-of-line symbol for the particular protocol. If data is expected, and you do not need a custom end-of-line symbol, you can use the default ATerminator value (#0). ATerminator values include:

#0 - Default Line Feed (#10)
LF - Line Feed (#10)
CR - Carriage Return (#13)"
EOL - End-of-line (Carriage Return + Line Feed)"



El algoritmo de encriptación que estoy usando es uno que encontré en esta página:

http://www.howtodothings.com/showart...sp?article=280 de ANATOLY PODGORETSKY

Y de hecho funciona muy bien, pero como es de esperarce en el texto encriptado ocasionalmente parecen los caracteres #10 y #13, supongo porqué no estába pensado para ser utilizado en Internet y es precisamente esto lo que hace que los mensajes se mutilen cuando se trabaja con los componentes Indy cuando se detecta uno de esos caracteres de fin de lines y retorno de carro.

Quisiera saber si no existiera una mejor forma de enviar mensajes encriptados que sean compatibles con Indy????

Muchas gracias de antemano.

jachguate 06-05-2004 00:50:06

El problema no es tando las indy... sino la combinación método-para-encriptar/método de transmisión que estas usando..

En lugar de hacer writeln/readln, podrias hacer un writebuffer/readbuffer, o bien cambiar el método para encriptar por uno que no incluya caracteres "especiales" dentro del resultado.

Por ejemplo el xorEncode xorDecode. El algoritmo está incluido en las rusas.

Hasta luego.

;)

JDNA 08-05-2004 01:40:03

Gracias
 
Holaa, te cuento que si funcionó muy bien con writebuffer/readbuffer, muchas gracias

DarkByte 17-05-2004 21:38:10

Una cosa más que aprendo hoy :)

eduarcol 17-05-2004 22:09:37

Pues yo soy de la opinion que no se deben usar algoritmos de encriptacion de conocimiento publico, puede ser un peligro, yo prefiero crear los mios y encerrarlos en DLL, de hecho cada cierta cantidad de tiempo creo uno nuevo para evitar que lo decifren :p

jachguate 17-05-2004 23:40:49

Podes usar un algoritmo de clave pública/privada, con lo que no hay problema que el algoritmo sea público... con que mantengas bien privada la clave... ;)

Hasta luego.

;)

DarkByte 18-05-2004 07:58:38

Pues yo no sé que hay de malo en utilizar un algoritmo público como el de Borland mientras que no sepan que algoritmo has usado.

También me gusta mucho cambiar aleatoriamente la clave, en el caso de nuestro amigo, se podría hacer que el servidor enviase el número de la nueva clave al revés (Ej. si la clave es 5689, se enviaría /$/9865 encriptada en la antigua clave antes de pasar a la nueva, lo del dólar es para identificar el cambio de clave), a partir de ahí el cliente y el servidor empezarían a hablar en esa otra clave. Lo mismo al conectarse un cliente, se le daría la nueva clave.


La franja horaria es GMT +2. Ahora son las 16:06:24.

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