Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > Trucos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Los mejores trucos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: Dec 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.567
Poder: 27
dec Va camino a la famadec Va camino a la fama
Cifrar y descifrar archivos y cadenas con DCPcrypt

DCPcrypt son unos estupendos componentes de código abierto escritos por David Barton. Pueden conseguirse gratuitamente en la página Web del autor: www.cityinthesky.co.uk

Con los componentes vienen ejemplos y documentación. La verdad es que son bastante sencillos de utilizar. Empero, la siguiente unidad, junto con los componentes que he mencionado, permite hacer un uso de los mismos más o menos sencillo.

Es posible, como se verá, cifrar y descifrar archivos y cadenas, con dos funciones, disponiendo de todos los "Ciphers" y "Hashes" incluidos en los componentes susomentados.

De todos modos no quiero dejar de decir que dichos componentes dan bastante más de sí, y que el siguiente código fuente podría ser una especie de "ejemplo de uso" de los mismos, pero, que no cubre todas sus posibilidades.

Código Delphi [-]
unit UCifrador;

interface

  { Declaraciones públicas
  }
  function Cifrar(cadena, password: string; algoritmo,
   hash: byte; descifrar: boolean) : string; overload;

  function Cifrar(archivo, destino, password: string;
   algoritmo, hash: byte; descifrar: boolean): boolean;
    overload;

implementation

uses
  Classes,
  SysUtils,

  { DCPcrypt v2.0 written by David Barton
    (http://www.cityinthesky.co.uk/)
  }
  DCPconst, DCPcrypt2, DCPblockciphers, DCPblowfish,
  DCPsha512, DCPcast128, DCPcast256, DCPidea, DCPice,
  DCPdes, DCPrc6, DCPrc5, DCPrc4, DCPrc2, DCPmisty1,
  DCPmars, DCPtwofish, DCPtea, DCPserpent, DCPrijndael,
  DCPtiger, DCPsha256, DCPsha1, DCPripemd160, DCPmd5,
  DCPmd4, DCPhaval, DCPripemd128;

{ Procedimiento auxiliar privado
}
procedure IniciarCifrador(var C: TDCP_Cipher;
  algoritmo, hash: byte; password: string);
begin
  case algoritmo of
   DCP_tea:      C := TDCP_tea.Create(nil);
   DCP_des:      C := TDCP_des.Create(nil);
   DCP_ice:      C := TDCP_ice.Create(nil);
   DCP_rc2:      C := TDCP_rc2.Create(nil);
   DCP_rc4:      C := TDCP_rc4.Create(nil);
   DCP_rc5:      C := TDCP_rc5.Create(nil);
   DCP_rc6:      C := TDCP_rc6.Create(nil);
   DCP_3des:     C := TDCP_3des.Create(nil);
   DCP_ice2:     C := TDCP_ice2.Create(nil);
   DCP_idea:     C := TDCP_idea.Create(nil);
   DCP_mars:     C := TDCP_mars.Create(nil);
   DCP_misty1:   C := TDCP_misty1.Create(nil);
   DCP_cast128:  C := TDCP_cast128.Create(nil);
   DCP_cast256:  C := TDCP_cast256.Create(nil);
   DCP_thinice:  C := TDCP_thinice.Create(nil);
   DCP_serpent:  C := TDCP_serpent.Create(nil);
   DCP_twofish:  C := TDCP_twofish.Create(nil);
   DCP_blowfish: C := TDCP_blowfish.Create(nil);
   DCP_rijndael: C := TDCP_rijndael.Create(nil);
  end;
  case hash of
    DCP_md4:       C.InitStr(password, TDCP_md4);
    DCP_md5:       C.InitStr(password, TDCP_md5);
    DCP_sha1:      C.InitStr(password, TDCP_sha1);
    DCP_haval:     C.InitStr(password, TDCP_haval);
    DCP_tiger:     C.InitStr(password, TDCP_tiger);
    DCP_sha256:    C.InitStr(password, TDCP_sha256);
    DCP_sha384:    C.InitStr(password, TDCP_sha384);
    DCP_sha512:    C.InitStr(password, TDCP_sha512);
    DCP_ripemd128: C.InitStr(password, TDCP_ripemd128);
    DCP_ripemd160: C.InitStr(password, TDCP_ripemd160);
  end;
end;

{ Cifrar o descifrar cadenas
}
function Cifrar(cadena, password: string; algoritmo,
  hash: byte; descifrar: boolean) : string;
var
  C: TDCP_Cipher;
begin
  Result := '';
  C := TDCP_Cipher.Create(nil);
  try
    IniciarCifrador(C, algoritmo, hash, password);
    if desCifrar then
      Result := C.DecryptString(cadena)
    else
      Result := C.EncryptString(cadena);
    C.Burn;
  finally
    C.Free;
  end;
end;

{ Cifrar o descifrar archivos
}
function Cifrar(archivo, destino, password: string;
  algoritmo, hash: byte; desCifrar: boolean) : boolean;
var
  C: TDCP_Cipher;
  fsOrigen, fsDestino: TStream;
begin
  fsOrigen := TFileStream.Create(archivo, fmOpenRead);
  fsDestino := TFileStream.Create(destino, fmCreate);
  C := TDCP_Cipher.Create(nil);
  try
    try
      IniciarCifrador(C, algoritmo, hash, password);
      if desCifrar then
        C.DecryptStream(fsOrigen, fsDestino, fsOrigen.Size)
      else
        C.EncryptStream(fsOrigen, fsDestino, fsOrigen.Size);
      C.Burn;
      Result := true;
    except
      Result := false;
    end;
  finally
    C.Free;
    fsOrigen.Free;
    fsDestino.Free;
  end;
end;

end.

Ejemplo de llamadas:

Código Delphi [-]
{
  Vamos a cifrar y descifrar una cadena utilizando
  el algoritmo "Blowfish" y el "hash" "SHA1".
}

uses
  DCPconst,  // Constantes
  UCifrador; // Función Cifrar

procedure TForm1.Button1Click(Sender: TObject);
var
  c: string;
  s: string;
begin

  // Clave (password) para el cifrado
  c := 'claveparacifrar';

  // Cadena a cifrar (por ejemplo)
  s := 'Cadena a cifrar';

  // Ciframos la cadena
  s := Cifrar(s, c, DCP_blowfish, DCP_sha1, false);

  // Mostramos la cadena "cifrada"
  ShowMessage(s); // Muestra la cadena "s" cifrada

  // Desciframos la cadena
  s := Cifrar(s, c, DCP_blowfish, DCP_sha1, true);

  ShowMessage(s); // Muestra "Cadena a cifrar"
  // es decir, la cadena vuelta a descifrar...

end;
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 11:08:10.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi