Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Algoritmo de Encriptacion (https://www.clubdelphi.com/foros/showthread.php?t=24075)

DarkByte 07-08-2005 19:49:32

Algoritmo de Encriptacion
 
Eps...

¿Alguien tiene por ahi algún código de encriptación/desencriptacion que devuelva valores que sean números y letras? Es que ya sabeis lo que pasa al enviar carácteres raros por socket :p ... sobre todo con indy y demás.

Si puede ser también, que no necesite ningun include... que se maneje con el sistema :\

Jan 07-08-2005 21:24:25

Hola Darkbyte:

Prueba con LockBox de TurboPower (en sourceforge). Trae algoritmos de cifrado para dar y regalar.

Mick 07-08-2005 22:40:04

Puedes usar el DCPCrypt , que incluye todo tipo de algoritmos de encriptacion:

http://www.cityinthesky.co.uk/cryptography.html

Aunque para dejar solo caracteres imprimibles basta que uses una codificacion en base64 y listo. En el DCPCrypt trae una unit para codificar en base64.

De todas formas no le veo sentido a lo que pretendes hacer, con indy se pueden enviar cualquier caracter sin ningun problema, y codificarlo en base64 o en lo que sea hara que el sistema vaya mas lento y los paquetes a transmitir ocupen mas de lo necesario.

Saludos

DarkByte 10-08-2005 01:31:04

Mick, con las indy no puedes enviar algunos carácteres, lo mismo pasa por irc ;)

De igual forma, yo no trabajo con compos, sino con sockets a pelo... gracias de igual forma por los componentes

Mick 10-08-2005 02:05:31

Cita:

Empezado por DarkByte
Mick, con las indy no puedes enviar algunos carácteres, lo mismo pasa por irc ;)

He usado las indy para multiples proyectos, incluida el envio de paquetes de datos binarios o la transmision de imagenes por streaming, sin necesidad de preprocesar los datos para eliminar caracteres no imprimibles, y todo sin ningun problema. Si tuviese ese problema, no habria usado las indy , y habria utilizado cualquier otro componente o las api de windows a pelo. Porque no seria de recibo tener que hacer mas lento el sistema y consumir mas ancho de banda, porque los componentes tuviesen una limitacion tan extraña.
En cuanto a lo del irc y las indy, es que no son cosas comparables, una cosa es un protocolo (el del irc) que en su definicion indique que solo se deben transmitir tal tipo de caraceres y otra es una serie de componentes de comunicacion con sockets.
Es decir una cosa es que algun componente de las indy que implementa un determinado protocolo de mas alto nivel no permita caracteres raros porque el protocolo lo diga asi, y otra es que no se pudiesen transmitir cualquier valor entre 0 y 255 a traves de un socket.

Saludos

DarkByte 14-08-2005 22:54:22

Vaya, vuelvo a necesitar urgentemente el algoritmo que me devuelva solo valores representables en la tabla ascii...para hacer un sistema de clientes irc encriptados.

Lo siento realmente, sé que aquí ayudais sin ánimo de lucro, pero me gustaria que quien lo sepa o tenga alguna idea,me la comente lo antes posible.

Muchisimas gracias.

Mick 15-08-2005 02:20:13

Sigo insistiendo en que utilices el siguiente paquete:

http://www.cityinthesky.co.uk/files/dcpcrypt2.zip

No tienes ni porque instalar los componentes, basta con con descomprimas el zip y simplemente cojas la unit:

DCPbase64.pas

Esa unit solo tiene dos funciones para codificar y descodificar en base 64:

Código:


unit DCPbase64;

interface
uses
  Sysutils;

function Base64EncodeStr(const Value: string): string;
  { Encode a string into Base64 format }
function Base64DecodeStr(const Value: string): string;
  { Decode a Base64 format string }

....

Saludos

DarkByte 15-08-2005 02:42:47

Aja, probare con las units, muchas gracias Mick, te cuento que tal me va ;)

DarkByte 15-08-2005 20:23:26

Funciona a la perfección. Gracias Mick, ahí tienes tus 10 puntos :p

Al González 23-08-2005 19:29:55

Lo que buscaba
 
¡Hola a todos!

Cita:

Empezado por Mick
...Sigo insistiendo en que utilices el siguiente paquete:
http://www.cityinthesky.co.uk/files/dcpcrypt2.zip...DCPbase64.pas Esa unit solo tiene dos funciones para codificar y descodificar en base 64...

Cita:

Empezado por David Barton (el autor de la biblioteca)
...DCPcrypt is open source software...

También yo buscaba algo así para decodificar unos campos de texto que fueron codificados en PHP con la función base64_encode.

Gracias.

Un abrazo encriptado.

Al González. :)

Maury Manosalva 20-09-2005 21:44:49

No entiendo como funciona la Encriptacion.. Ayuda
 
Por favor entendidos en el tema, me pueden hacer el favor y de explicarme como trabajar con este programa para encriptar y desencriptar un archivo.. Nevcesito encriptar un txt y desencriptarlo para un manejo de treeview.. gracias mil.

Maury Manosalva

Luis Castillo 05-11-2005 01:12:41

De acuerdo
 
Estoy de acuerdo con el señor Maury. Seria posible que presentaran un vinculo donde narrara un poco sobre las bases de la encriptacion. Veo que hablan de formatos y demas reglas....

Quisiera iniciarme mas en este tema....

Les agradezco mucho


Gracias..

Delphius 05-11-2005 05:44:13

puede ser:
 
Luis Castillo, aquí en los foros se ha tratado muchas veces este tema... ,es más... me acuerdo que he participado en algunos de ellos). Una simple búsqueda en los foros te resultará de utilidad:
http://www.clubdelphi.com/foros/sear...earchid=356387
http://www.clubdelphi.com/foros/sear...earchid=355898

De todas maneras, se puede saber un poco más si buscas en google:
http://www.google.com.ar/search?hl=e...%BAsqueda&meta=

Lo poco que aprendí de esto lo hice buscando, y buscando....

carlocf 05-11-2005 15:27:02

Saludos a todo el foro

Para aquellos que les interesa la criptologia pueden visitar la pagina www.kriptopolis.com

Saludos
Carlo

principiodual 29-09-2014 17:53:36

Cita:

Empezado por Mick (Mensaje 101526)
Sigo insistiendo en que utilices el siguiente paquete:

http://www.cityinthesky.co.uk/files/dcpcrypt2.zip

No tienes ni porque instalar los componentes, basta con con descomprimas el zip y simplemente cojas la unit:

DCPbase64.pas

Esa unit solo tiene dos funciones para codificar y descodificar en base 64:

Código:


unit DCPbase64;

interface
uses
  Sysutils;

function Base64EncodeStr(const Value: string): string;
  { Encode a string into Base64 format }
function Base64DecodeStr(const Value: string): string;
  { Decode a Base64 format string }

....

Saludos

Buenas amigos, me gustaría hacer uso de ese paquete que habla, pero al dar link me dice que está caído, podría de alguna manera acceder a esa Unit para hacer las pruebas, es que he probado varios metodos de cifrados pero generan caracteres extraños y estoy trabajando con una base de datos de IBM en db2 y todos los caracteres extraños los convierte a cuadritos, por eso me gustaría probar un método que solo cifre con caracteres ascii o alfanúmericos. Si me puede orientar muchas gracias, de todas maneras sigo investigando. Saludos.

nlsgarcia 29-09-2014 19:04:40

principiodual

Cita:

Empezado por principiodual
...me gustaría probar un método que solo cifre con caracteres ASCII o Alfanuméricos...

:rolleyes:

Revisa esta información
Espero sea útil :)

Nelson.

principiodual 29-09-2014 20:44:41

Cita:

Empezado por nlsgarcia (Mensaje 482292)
principiodual


:rolleyes:

Revisa esta información
Espero sea útil :)

Nelson.

Muchas gracias amigo, a chequear entonces , saludos.

pacopenin 29-09-2014 21:13:51

Cita:

Empezado por principiodual (Mensaje 482280)
Buenas amigos, me gustaría hacer uso de ese paquete que habla, pero al dar link me dice que está caído, podría de alguna manera acceder a esa Unit para hacer las pruebas, es que he probado varios metodos de cifrados pero generan caracteres extraños y estoy trabajando con una base de datos de IBM en db2 y todos los caracteres extraños los convierte a cuadritos, por eso me gustaría probar un método que solo cifre con caracteres ascii o alfanúmericos. Si me puede orientar muchas gracias, de todas maneras sigo investigando. Saludos.

Buenas. El paquete al que te refieres es éste : http://www.cityinthesky.co.uk/opensource/dcpcrypt/

Saludos.

principiodual 29-09-2014 23:05:43

Cita:

Empezado por pacopenin (Mensaje 482298)
Buenas. El paquete al que te refieres es éste : http://www.cityinthesky.co.uk/opensource/dcpcrypt/

Saludos.

Muchas gracias amigo, a revisar entonces.

nlsgarcia 01-10-2014 07:44:19

principiodual

Cita:

Empezado por principiodual
...me gustaría probar un método que solo cifre con caracteres ASCII o Alfanuméricos...

:rolleyes:

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Memo1: TMemo;
    Memo2: TMemo;
    Memo3: TMemo;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TState = Array[0..3,0..3] of Byte;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Realiza operaciones matriciales de intercambio de filas
procedure ShiftRows(var State: TState);
var
   i,j,k : Integer;
begin
   for j := 1 to 3 do
   begin
      k := State[0,j];
      State[0,j] := State[1,j];
      State[1,j] := State[2,j];
      State[2,j] := State[3,j];
      State[3,j] := k;
   end;
end;

// Realiza operaciones matriciales de intercambio de columnas
procedure ShiftCols(var State: TState);
var
   i,j,k : Integer;
begin
   for j := 1 to 3 do
   begin
      k := State[j,0];
      State[j,0] := State[j,1];
      State[j,1] := State[j,2];
      State[j,2] := State[j,3];
      State[j,3] := k;
   end;
end;

// Realiza operaciones matriciales inversas de intercambio de filas
procedure InvShiftRows(var State: TState);
var
   i,j,k : Integer;
begin
   for j := 1 to 3 do
   begin
      k := State[3,j];
      State[3,j] := State[2,j];
      State[2,j] := State[1,j];
      State[1,j] := State[0,j];
      State[0,j] := k;
   end;
end;

// Realiza operaciones matriciales inversas de intercambio de columnas
procedure InvShiftCols(var State: TState);
var
   i,j,k : Integer;
begin
   for j := 1 to 3 do
   begin
      k := State[j,3];
      State[j,3] := State[j,2];
      State[j,2] := State[j,1];
      State[j,1] := State[j,0];
      State[j,0] := k;
   end;
end;

// Convierte una cadena de carácteres ASCII a su equivalente Hexadecimal
function StringToHex(S : String): String;
var
   i: Integer;
begin
   for i := 1 to Length(S) do
      Result := Result + IntToHex(Ord(S[i]), 2);
end;

// Convierte una cadena de carácteres Hexadecimal a su equivalente ASCII
function HexToString(S : String): String;
var
   i : Integer;
begin
   for i := 1 to Length(S) do
      if ((i mod 2) = 1) then
         Result := Result + Chr(StrToInt('0x' + Copy(S, i, 2)));
end;

// Cifra un String por medio de una clave con operaciones matriciales y funciones lógicas
function Encode(DataStr, Key : String) : String;
var
   i : Integer;
   AuxStr : String;
   AuxKey : LongWord;
   Src, Dst : TStringStream;
   State : TState;

begin

   Src := TStringStream.Create(DataStr);
   Dst := TStringStream.Create('');

   FillChar(State,Sizeof(State),#0);

   while Src.Read(State,Sizeof(State)) > 0 do
   begin
      ShiftRows(State);
      ShiftCols(State);
      Dst.WriteBuffer(State,Sizeof(State));
      FillChar(State,Sizeof(State),#0);
   end;

   AuxKey := 0;

   for i := 1 to length(Key) do
      AuxKey := (AuxKey + ord(Key[i])) xor Length(Key);

   for i:=1 to length(Dst.DataString) do
      AuxStr := AuxStr + chr(ord(Dst.DataString[i]) xor AuxKey);

   Result := StringToHex(AuxStr);

end;

// Descifra un String por medio de una clave con operaciones matriciales y funciones lógicas
function Decode(DataStr, Key : String) : String;
var
   i : Integer;
   AuxStr : String;
   AuxKey : LongWord;
   Src, Dst : TStringStream;
   State : TState;

begin

   DataStr := HexToString(DataStr);

   Src := TStringStream.Create(DataStr);
   Dst := TStringStream.Create('');

   FillChar(State,Sizeof(State),#0);

   while Src.Read(State,Sizeof(State)) > 0 do
   begin
      InvShiftCols(State);
      InvShiftRows(State);
      Dst.WriteBuffer(State,Sizeof(State));
      FillChar(State,Sizeof(State),#0);
   end;

   AuxKey := 0;

   for i := 1 to length(Key) do
      AuxKey := (AuxKey + ord(Key[i])) xor Length(Key);

   for i:=1 to length(Dst.DataString) do
      AuxStr := AuxStr + chr(ord(Dst.DataString[i]) xor AuxKey);

   Result := AuxStr;

end;

// Llama la función que Cifra una cadena de carácteres
procedure TForm1.Button1Click(Sender: TObject);
begin
   Memo2.Text := Encode(Memo1.Text, Edit1.Text);
end;

// Llama la función que Descifra una cadena de carácteres
procedure TForm1.Button2Click(Sender: TObject);
begin
   Memo3.Text := Decode(Memo2.Text, Edit1.Text);
end;

// Reset los controles del formulario
procedure TForm1.Button3Click(Sender: TObject);
begin
   Edit1.Text := EmptyStr;
   Memo1.Clear;
   Memo2.Clear;
   Memo3.Clear;
end;

end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32, Cifra y Descifra una cadena de caracteres por medio de una clave utilizando operaciones matriciales y funciones lógicas, según se muestra en la siguiente imagen:



Nota: El código propuesto es útil como una opción de cifrado/descifrado de Strings, sin embargo si los requerimientos de la aplicación lo ameritan, te sugiero implementar el algoritmo Advanced Encryption Standard (AES) (Msg #16), el cual a sido adoptado como : El estándar de cifrado por el gobierno de los Estados Unidos.

Espero sea útil :)

Nelson.


La franja horaria es GMT +2. Ahora son las 17:12:11.

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