Beruflich Dokumente
Kultur Dokumente
name=News&file=print&sid=485
Explicamos en este artculo cmo encriptar y desencriptar ficheros mediante los algoritmos RC2, RC4, DES,
3DES y AES. Mostramos y explicamos el cdigo fuente de la aplicacin AjpdSoft Encriptar ficheros con
CAPICOM. Explicamos qu es CAPICOM y cmo descargarlo y registrarlo. Mostramos cmo usar CAPICOM
con Borland Delphi.
CAPICOM se puede empaquetar como un control ActiveX, para ser instalado en los navegadores y permitir a los
desarrolladores Web utilizarla en aplicaciones basadas en Web (ASP, PHP, etc.). Adems, CAPICOM cuenta con
un SDK (kit de desarrollo de software o Software Development Kit) con las libreras necesarias para que sea
usado por lenguajes de programacin para desarrollar aplicaciones de escritorio (Delphi, Visual Basic .Net,
Visual Basic, etc.).
De esta forma, con CAPICOM podremos implementar la utilidad de uso de certificados digitales en nuestras
aplicaciones casi sin esfuerzo, pues todas las funciones necerias para el acceso a estos certificados ya estn
1 de 20 10/7/17 1:41
Encriptar y desencriptar ficheros con CAPICOM y Delphi Imprimible P... http://www.ajpdsoft.com/modules.php?name=News&file=print&sid=485
http://www.microsoft.com/downloads/details.aspx?FamilyID=860ee43a-a843-462f-abb5-
ff88ea5896f6&DisplayLang=es
Leeremos los trminos de licencia, si estamos de acuerdo marcaremos "I accept the terms in the License
Agreement" y pulsaremos "Next":
2 de 20 10/7/17 1:41
Encriptar y desencriptar ficheros con CAPICOM y Delphi Imprimible P... http://www.ajpdsoft.com/modules.php?name=News&file=print&sid=485
Indicaremos en "Location" la carpeta de destino de CAPICOM SDK (pulsando "Browse" podremos cambiarla),
pulsaremos "Next" para continuar:
3 de 20 10/7/17 1:41
Encriptar y desencriptar ficheros con CAPICOM y Delphi Imprimible P... http://www.ajpdsoft.com/modules.php?name=News&file=print&sid=485
En realidad, la instalacin de CAPICOM 2.1.0.2 SDK lo nico que hace es descomprimir una carpeta en la
carpeta de destino con los siguientes ficheros y subcarpetas:
4 de 20 10/7/17 1:41
Encriptar y desencriptar ficheros con CAPICOM y Delphi Imprimible P... http://www.ajpdsoft.com/modules.php?name=News&file=print&sid=485
La carpeta que ms nos interesa es "Lib" que contiene la librera "capicom.dll" necesaria para el funcionamiento
de nuestra aplicacin. Esta librera deber estar en la carpeta del sistema, en C:WindowsSystem32 y
correctamente registrada con "regsvr32.exe" o AjpdSoft Registro de OCX y DLL como explicamos aqu.
5 de 20 10/7/17 1:41
Encriptar y desencriptar ficheros con CAPICOM y Delphi Imprimible P... http://www.ajpdsoft.com/modules.php?name=News&file=print&sid=485
A continuacin registraremos la librera capicom.dll o bien usando regsvr32.exe o bien utilizando AjpdSoft
Registro de OCX y DLL, abriremos AjpdSoft Registro de OCX y DLL ejecutando el fichero "registroOCX.exe"
en modo administrador, pulsando con el botn derecho sobre el fichero descargado y seleccionando "Ejecutar
como administrador":
6 de 20 10/7/17 1:41
Encriptar y desencriptar ficheros con CAPICOM y Delphi Imprimible P... http://www.ajpdsoft.com/modules.php?name=News&file=print&sid=485
7 de 20 10/7/17 1:41
Encriptar y desencriptar ficheros con CAPICOM y Delphi Imprimible P... http://www.ajpdsoft.com/modules.php?name=News&file=print&sid=485
Pulsaremos en "Registrar":
Con el texto:
8 de 20 10/7/17 1:41
Encriptar y desencriptar ficheros con CAPICOM y Delphi Imprimible P... http://www.ajpdsoft.com/modules.php?name=News&file=print&sid=485
Registrados: 1.
No registrados: 0
Nota: si tenemos activado el control de cuentas de usuario (UAC) de Windows 7, es posible que nos muestre
algn mensaje de confirmacin al que tendremos que respondier "S".
Abriremos Delphi, crearemos un nuevo proyecto, aadiremos algunos componentes al formulario principal:
algunos TEdit, TButton, etc. El formulario quedar de la siguiente forma:
9 de 20 10/7/17 1:41
Encriptar y desencriptar ficheros con CAPICOM y Delphi Imprimible P... http://www.ajpdsoft.com/modules.php?name=News&file=print&sid=485
encriptar(txtContrasena.Text, txtFicheroEncriptar.Text,
txtFicheroDestinoEncriptado.Text);
end;
El procedimiento "desencriptar":
procedure desencriptar (contrasena : string; ficheroDesencriptar : string;
ficheroDestino : string);
var
EncryptedData: IEncryptedData;
Buffer: WideString;
FileStm: TFileStream;
begin
//Crear objeto EncryptedData
EncryptedData := CoEncryptedData.Create;
//Establecemos la contrasea
EncryptedData.SetSecret(contrasena, CAPICOM_SECRET_PASSWORD);
//Cargamos el fichero a desencriptar
FileStm := TFileStream.Create(ficheroDesencriptar,
10 de 20 10/7/17 1:41
Encriptar y desencriptar ficheros con CAPICOM y Delphi Imprimible P... http://www.ajpdsoft.com/modules.php?name=News&file=print&sid=485
fmOpenRead or fmShareDenyWrite);
try
pointer(Buffer):= SysAllocStringByteLen(nil, FileStm.Size);
FileStm.ReadBuffer(Pointer(Buffer)^, FileStm.Size);
finally
FileStm.Free;
end;
//Desencriptamos el fichero en memoria
EncryptedData.Decrypt(Buffer);
Buffer := EncryptedData.Content;
//Guardamos el fichero desencriptado en memoria en el fichero destino
FileStm:= TFileStream.Create(ficheroDestino, fmCreate or fmShareDenyWrite);
try
FileStm.WriteBuffer(Pointer(Buffer)^, SysStringByteLen(PWideChar(Buffer)));
finally
FileStm.Free;
end;
MessageDlg('Fichero desencriptado.', mtInformation, [mbok], 0);
end;
El procedimiento "encriptar":
FileStm := TFileStream.Create(ficheroEncriptar,
fmOpenRead or fmShareDenyWrite);
try
Pointer(Buffer):= SysAllocStringByteLen (nil, FileStm.Size);
FileStm.ReadBuffer(Pointer(Buffer)^, FileStm.Size);
EncryptedData.Content:= Buffer;
finally
FileStm.Free;
end;
//Encriptar fichero
Buffer:= EncryptedData.Encrypt(CAPICOM_ENCODE_BINARY);
//Guardar fichero encritado en fichero destino
FileStm := TFileStream.Create(ficheroDestino, fmCreate or fmShareDenyWrite);
try
FileStm.WriteBuffer(Pointer(Buffer)^, SysStringByteLen(PWideChar(Buffer)));
finally
FileStm.Free;
end;
MessageDlg('Fichero encriptado.', mtInformation, [mbok], 0);
end;
11 de 20 10/7/17 1:41
Encriptar y desencriptar ficheros con CAPICOM y Delphi Imprimible P... http://www.ajpdsoft.com/modules.php?name=News&file=print&sid=485
Para encriptar un fichero, en primer lugar, lo seleccionaremos pulsando el botn "..." (o bien escribiremos la ruta
y nombre en "Fichero a Encriptar"):
12 de 20 10/7/17 1:41
Encriptar y desencriptar ficheros con CAPICOM y Delphi Imprimible P... http://www.ajpdsoft.com/modules.php?name=News&file=print&sid=485
13 de 20 10/7/17 1:41
Encriptar y desencriptar ficheros con CAPICOM y Delphi Imprimible P... http://www.ajpdsoft.com/modules.php?name=News&file=print&sid=485
Si accedemos a la carpeta de destino, podremos ver el fichero encriptado creado por la aplicacin:
Si intentamos abrirlo veremos caracteres ilegibles, por lo que el proceso de encriptacin se ha realizado
correctamente:
Para desencriptar un fichero, el proceso es similar, pero en "Desencriptar fichero", aunque para este proceso no
es necesario indicar el algoritmo de encriptacin previo. Para desencriptar el fichero lo seleccionaremos pulsando
en el botn "..." de "Fichero a desencriptar", en "Contrasea" introduciremos la contrasea con la que lo
encriptamos y pulsaremos el botn "Desencriptar":
14 de 20 10/7/17 1:41
Encriptar y desencriptar ficheros con CAPICOM y Delphi Imprimible P... http://www.ajpdsoft.com/modules.php?name=News&file=print&sid=485
Si abrimos el fichero desencriptado, podremos ver que el texto ya es legible nuevamente "Prueba de encriptacin
de fichero por AjpdSoft":
15 de 20 10/7/17 1:41
Encriptar y desencriptar ficheros con CAPICOM y Delphi Imprimible P... http://www.ajpdsoft.com/modules.php?name=News&file=print&sid=485
Por supuesto, en el ejemplo hemos encriptado y desencriptado un fichero de texto plano, pero AjpdSoft Encriptar
ficheros con CAPICOM se puede usar para encriptar y desencriptar cualquier tipo de fichero (mp3, txt, doc, xls,
mdb, rar, zip, jpg, pdf, html, tif, asp, php, exe, com, bat, etc.).
Anexo
Cdigo fuente source code aplicacin AjpdSoft Encriptar ficheros con CAPICOM
A continuacin os mostramos el cdigo fuente (source code) completo en Borland Delphi 6 de la aplicacin
AjpdSoft Encriptar ficheros con CAPICOM:
unit UnidadMenuPrincipal;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, shellapi, activex, CAPICOM_TLB, Buttons, ComCtrls;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
Label1: TLabel;
txtContrasena: TEdit;
txtFicheroEncriptar: TEdit;
Label2: TLabel;
txtFicheroDestinoEncriptado: TEdit;
Label3: TLabel;
txtAlgoritmoEncriptacion: TComboBox;
Label4: TLabel;
LWEB: TLabel;
GroupBox2: TGroupBox;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
txtContrasenaDesencriptar: TEdit;
txtFicheroDesencriptar: TEdit;
txtFicheroDestinoDesencriptado: TEdit;
btEncriptar: TBitBtn;
btDesencriptar: TBitBtn;
btSelFicEncriptar: TBitBtn;
BitBtn1: TBitBtn;
bSelFicDes: TBitBtn;
BitBtn3: TBitBtn;
dlAbrir: TOpenDialog;
txtTamanoDatosEncriptar: TComboBox;
Label9: TLabel;
btSalir: TBitBtn;
StatusBar1: TStatusBar;
procedure LWEBClick(Sender: TObject);
procedure btEncriptarClick(Sender: TObject);
procedure btDesencriptarClick(Sender: TObject);
procedure btSelFicEncriptarClick(Sender: TObject);
procedure txtFicheroEncriptarChange(Sender: TObject);
procedure bSelFicDesClick(Sender: TObject);
procedure txtFicheroDesencriptarChange(Sender: TObject);
procedure btSalirClick(Sender: TObject);
private
{ Private declarations }
16 de 20 10/7/17 1:41
Encriptar y desencriptar ficheros con CAPICOM y Delphi Imprimible P... http://www.ajpdsoft.com/modules.php?name=News&file=print&sid=485
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
algoritmo: CAPICOM_ENCRYPTION_ALGORITHM = CAPICOM_ENCRYPTION_ALGORITHM_RC2;
tamanoDatosAlgoritmo: CAPICOM_ENCRYPTION_KEY_LENGTH =
CAPICOM_ENCRYPTION_KEY_LENGTH_MAXIMUM;
FileStm := TFileStream.Create(ficheroEncriptar,
fmOpenRead or fmShareDenyWrite);
try
Pointer(Buffer):= SysAllocStringByteLen (nil, FileStm.Size);
FileStm.ReadBuffer(Pointer(Buffer)^, FileStm.Size);
EncryptedData.Content:= Buffer;
finally
FileStm.Free;
end;
//Encriptar fichero
Buffer:= EncryptedData.Encrypt(CAPICOM_ENCODE_BINARY);
//Guardar fichero encritado en fichero destino
FileStm := TFileStream.Create(ficheroDestino, fmCreate or fmShareDenyWrite);
try
FileStm.WriteBuffer(Pointer(Buffer)^, SysStringByteLen(PWideChar(Buffer)));
finally
FileStm.Free;
end;
MessageDlg('Fichero encriptado.', mtInformation, [mbok], 0);
end;
17 de 20 10/7/17 1:41
Encriptar y desencriptar ficheros con CAPICOM y Delphi Imprimible P... http://www.ajpdsoft.com/modules.php?name=News&file=print&sid=485
EncryptedData.SetSecret(contrasena, CAPICOM_SECRET_PASSWORD);
//Cargamos el fichero a desencriptar
FileStm := TFileStream.Create(ficheroDesencriptar,
fmOpenRead or fmShareDenyWrite);
try
pointer(Buffer):= SysAllocStringByteLen(nil, FileStm.Size);
FileStm.ReadBuffer(Pointer(Buffer)^, FileStm.Size);
finally
FileStm.Free;
end;
//Desencriptamos el fichero en memoria
EncryptedData.Decrypt(Buffer);
Buffer := EncryptedData.Content;
//Guardamos el fichero desencriptado en memoria en el fichero destino
FileStm:= TFileStream.Create(ficheroDestino, fmCreate or fmShareDenyWrite);
try
FileStm.WriteBuffer(Pointer(Buffer)^, SysStringByteLen(PWideChar(Buffer)));
finally
FileStm.Free;
end;
MessageDlg('Fichero desencriptado.', mtInformation, [mbok], 0);
end;
encriptar(txtContrasena.Text, txtFicheroEncriptar.Text,
txtFicheroDestinoEncriptado.Text);
end;
18 de 20 10/7/17 1:41
Encriptar y desencriptar ficheros con CAPICOM y Delphi Imprimible P... http://www.ajpdsoft.com/modules.php?name=News&file=print&sid=485
end.
Artculos relacionados
Uso de CAPICOM y Delphi para acceso a los certificados digitales.
AjpdSoft Obtener datos certificados digitales.
Cmo firmar digitalmente una factura - facturacin telemtica mediante Delphi.
El spam, esa gran lacra de las comunicaciones actuales.
Nemesys de Telefnica qu es? Las listas negras, Spamhaus, cmo salir de ellas.
Instalacin de Microsoft Windows 7 Ultimate virtualizado en VMware Server 2.0.1.
AjpdSoft Notificador cambios en sistema.
AjpdSoft Clculo CRC.
19 de 20 10/7/17 1:41
Encriptar y desencriptar ficheros con CAPICOM y Delphi Imprimible P... http://www.ajpdsoft.com/modules.php?name=News&file=print&sid=485
Crditos
Artculo realizado ntegramente por Alonsojpd miembro fundador del proyecto AjpdSoft.
20 de 20 10/7/17 1:41