Indy com criptografia

01/03/2010

1

Estou usando o Indy para enviar mensagens em uma aplicação de chat e para aumentar a segurança estou usando um código de criptografia que peguei na devmedia, mas ao ler a string  o AContext.Connection.IOHandler.ReadLn do indy, ele não esta recebendo os caracteres como foi criptografado, para este teste criei preenchi em um memo no envio a string criptografa e descriptografada, pelo que percebi o alguns carateres no indy foi colocado como ?, aparentemente ele não interpretou todos os caracteres.   Segue o código da criptografia:   unit criptografia;
   interface uses SysUtils, Classes; type
   TCryptSample = class
   private FKey : Word; protected {Protected properties}
   public
   constructor Create;
   //Função de criptografia/descriptografia
   function Crypt( Text : String ) : String;
   published
     property Key : Word read FKey write FKey; end;
     //Constantes de controle
     const C1 = 33598; C2 = 24219; implementation
  uses Math; constructor TCryptSample.Create;
begin
    //Construtor original
    FKey := Random( 9999999 );
end; function TCryptSample.Crypt(Text: String): String;
  var
   i : Byte;
   key : Word;
   tmpText : String;   {*** * Esta função retorna (alternadamente) o valor * do byte de um caractere (consecutivo/descartável) * das constantes de controle "C1 e C2" ***}
   function getAltC( n : integer ) : Word;
   var
     sC1, sC2 : String;
     sUso : String;
     Return : String[1];
     sUsoLength : integer;
   begin
     sC1 := IntToStr( C1 ) ;
     sC2 := IntToStr( C2 ) ;
     //Verificando qual usar de acordo com o módulo
     case n mod 2 of
          0 : sUso := sC1 ;
          1 : sUso := sC2 ;
     end;
     //Verificando o tamanho da string a usar
     sUsoLength := Length( sUso ) ;
     //Obtendo o caractere
     Return := Copy( sUso, ( ( ( n - 1 ) mod sUsoLength ) + 1 ) , 1 );
     //Retornando o byte correspondente do resultado
     Result := Byte( Return[0] ) ;
   end;
begin
      //Criptografia dos dados
      key := FKey;
      //Loop principal
      for i := 1 to Length( Text ) do
       begin
         tmpText := tmpText + Char( Byte( Text[ i ] ) xor ( key shr 8 ) ) ;
         //Nova Key lógica
         key := ( key * ( C1 + C2 ) ) + getAltC( i ) ;
       end;
       //Retornando o resultado
       Result := tmpText;
end;    
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira