FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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. |
#2
|
||||
|
||||
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.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#3
|
|||
|
|||
Gracias
Holaa, te cuento que si funcionó muy bien con writebuffer/readbuffer, muchas gracias
|
#4
|
||||
|
||||
Una cosa más que aprendo hoy
__________________
:) |
#5
|
||||
|
||||
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
__________________
...Yo naci en esta ribera del arauca vibr@d0r Soy hermano de la espuma, de la garza, de la rosa y del sol... Viva Venezuela |
#6
|
||||
|
||||
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.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#7
|
||||
|
||||
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.
__________________
:) |
|
|
|