Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Utilizar modulo encriptacion en Delphi (https://www.clubdelphi.com/foros/showthread.php?t=76284)

Toni 21-10-2011 13:19:52

Utilizar modulo encriptacion en Delphi
 
Hola a todos!

Estoy intentando utilizar unas librerias de Delphi del compañero Seonane para encriptar con AES-256:

http://delphi.jmrds.com/?q=node/43

Esto lo quiero incorporar en un proyecto de C++ Builder 6 y como ya he realizado otras veces no hay problema en incorporar units .pas, pero en este caso al compilar me esta dando un problema que no encuentra o no puede enlazar con la dll del sistema Crypt32.dll. que creo esta perfectamente declarado en el codigo.

Código Delphi [-]
function CryptBinaryToString(pbBinary: PByte; cbBinary: DWORD; dwFlags: DWORD;
  pszString: PChar; var pcchString: DWORD): BOOL; stdcall;
  external 'Crypt32.dll' name 'CryptBinaryToStringA';

Exactamente el mensaje de error que me da el linker es:

Código Delphi [-]
[Linker Error] Unresolved external 'CryptStringToBinaryA' referenced from ....
]

Las otras librerias .pas me las compila bien. Solo falla el enlace con estas API de Guindows.

Gracias.

Neftali [Germán.Estévez] 21-10-2011 15:51:19

TAl y como explica en la página de Seoane, esas funciones utilizan la API de Windows. Debes asegurarte de que la API está instalada en tu sistema.

Si no lo tienes segúramente deberás instalar esto.

Al González 21-10-2011 18:10:44

Hola Toni.

Sin desvalorizar la biblioteca (library = biblioteca) de Domingo Seoane, que con toda seguridad es muy buena, te comento que hace algunas semanas intenté usar en directo las DLLs nativas de Microsoft del enlace que amablemente señala Neftalí. No obstante, entrando desde esa página al enlace que reza Alternatives to Using CAPICOM, me di cuenta de la variedad y versatilidad de clases que .NET tiene en el terreno de la criptografía.

Como CAPICOM me resultaba insuficientemente amigable y no encontraba alternativas Delphi / Win32 para el objetivo que me habían encomendado (hacer firma digital XML), opté por escribir una sencilla clase en C# con una versión de prueba de Visual Studio, y compilé dicha clase como un ensamblaje (assembly) DLL capaz de ser llamado desde aplicaciones Win32. La clave para lograr esta compatibilidad es que la biblioteca generada exporte tu clase .NET como interfaz COM.

Para quienes encuentren interesante esto, en la ayuda de Delphi (y supongo que en la de C++ Builder también) hay información al respecto en los apartados: Requirements for COM interoperability, .NET components and type libraries y Accessing user-defined .NET components (recomiendo leerlos en ese orden). Al parecer Microsoft acuña los términos interoperability y COM Callable Wrappers (CCW); buscándolos en Google se encuentran varios ejemplos que pueden resultar útiles (además del que Borland describe en la ayuda).

Sin más propósito que enriquecer el tema.

Saludos.

Al González.

Toni 21-10-2011 18:34:30

Hola,

Muchas gracias por ambas respuestas.

Cita:

Neftali dijo:
Debes asegurarte de que la API está instalada en tu sistema.
La libreria en cuestion es la dll Crypt32.dll que forma parte de la API de Windows y que esta en mi sistema. Ademas la tengo copiada en el propio directorio de la aplicación. Pero este problema que tengo parece mas algo de linkado que otra cosa. Como no domino la sintaix de Delphi no se si es necesario algo mas para enlazar la libreria de forma dinamica?

Al Gonzalez, te agradezco mucho tambien tu aportación. Pero creo que si puedo utilizar estas librerias inicialmente es mas que suficiente y al disponer de los fuentes me permite hacer algo muy compacto.

Como comentario, deciros que esto lo quiero para realizar una pequeña utileria para Firebird para poder encriptar/desencriptar facilmente todo el código de procedimientos almacenados de una base de datos. Que para quien realiza aplicaciones con un peso muy importante en la base de datos es importante proteger. La cual cuando este terminada la pondre a disposición del Club Delphi.

escafandra 21-10-2011 21:21:44

Cita:

Empezado por Toni (Mensaje 416410)
...parece mas algo de linkado que otra cosa...

Es así, tienes razón.
La solución es sencilla, debes crear Crypt32.lib, para ello abre una consola de comandos en la carpeta donde tienes Crypt32.dll y ejecuta:
Código:

implib Crypt32.lib Crypt32.dll
Seguidamente en tu código detrás de los #include... añade esta línea:
Código:

#pragma comment(lib, "Crypt32.lib")
Ahora puedes compilar, enlazará sin problemas. ;)


Saludos.

Toni 22-10-2011 11:13:39

Eres es un monstruo!! :D

Con estos funciona perfectamente!

Me despistaba porque desde el C++ Builder puedes llamar todas las apis sin necesidad de declararlas (estan todas declaradas en los archivos de cabecera) ni hacer todo esto, pero como esta en un modulo .pas ya hacia su propia declaracion externa.... pero bueno ya esta.

Muchas gracias! :)

escafandra 23-10-2011 14:58:07

Cita:

Empezado por Toni (Mensaje 416469)
Eres es un monstruo!! :D

Gracias.

Cita:

Empezado por Toni (Mensaje 416469)
Me despistaba porque desde el C++ Builder puedes llamar todas las apis sin necesidad de declararlas (estan todas declaradas en los archivos de cabecera)...

En esto te equivocas.

Sólo están las APIs que "existían" en cada momento al aparecer la versión correspondiente. Builder 6 es bastante antiguo...
Para usar las APIs modernas las tienes que declarar e importar.


Saludos.

Toni 23-10-2011 20:13:07

Cita:

Sólo están las APIs que "existían" en cada momento al aparecer la versión correspondiente. Builder 6 es bastante antiguo...
Para usar las APIs modernas las tienes que declarar e importar.
Tienes toda la razon, pero en concreto las apis que se utilizan en este modulo sin estan declaradas en mi C++ Builder en el archivo de cabecera: wincrypt.h y todas las 'tipicas' de win32 estan en el windows.h

Pero igualmente, eres un monstruo! :D

Toni 24-10-2011 21:30:05

Hola compañeros!

Tal y como os comente, subo una primera version beta de esta pequeña utilidad para Firebird que nos permite encriptar/desencriptar los procedimientos almacenados de una base de datos. A mi personalmente me va a ir muy bien para simplificar el mantenimiento de mis aplicaciones basadas en Firebird.

Lo he subido en este hilo pero si creeis que es mas oportuno subir en otro hilo vosotros mismos.

Nota: Agradecimientos al compañero Seonane por sus modulos de encriptacion.
Nota2: Ojo es una beta!

Toni 24-10-2011 21:34:37

No sube mi fichero adjunto:(
Y solo tiene 195kb....me podeis hechar una mano, gracias.

Casimiro Notevi 24-10-2011 22:02:20

¿Por qué no sube?, ¿qué mensaje sale?

Toni 24-10-2011 22:10:15

Si, perdona. Dice que 'Excede tu cuota por 102,0 KB' pero teoricamente puedo suber hasta 293kb y ocupa menos.

Casimiro Notevi 24-10-2011 22:14:26

Súbelo al FTP, hay una sección "Builder" con varios apartados: Componentes, Ejemplos, Manuales, Otros documentos y Tools.
Puedes subirlo al que creas más conveniente y luego lo enlazas desde tu mensaje.

Casimiro Notevi 24-10-2011 22:25:59

Por favor, ¡¡¡no subas un ejecutable!!!.
Por cuestiones de seguridad, no lo podemos admitir, ha sido borrado.
Sube el código fuente en un zip o un rar, directamente.

Toni 24-10-2011 22:30:49

Disculpa, no sabia que no se permitia ejecutables.

Bueno la idea era compartir la utilidad, si subo los fuentes quien no tenga la misma version C++ Builder no podra compilarlo.

http://www.terawiki.clubdelphi.com/B...s firebird.rar

Casimiro Notevi 24-10-2011 22:36:57

Cita:

Empezado por Toni (Mensaje 416638)
Aqui esta el enlace:

¿Has leído mi mensaje anterior y el MP que te he enviado?

Toni 24-10-2011 22:47:35

Si, ahora veo el mensaje Casimiro. Ya he subido los fuentes. Como decia en el ultimo post la idea era compartir tambien el ejecutable para quien quiera probarlo o utilizarlo y habra mucha gente del foro que no tenga C++ Builder para compilarlo.

Casimiro Notevi 24-10-2011 22:51:45

Es que esto es un sitio de compartir código, aprender, etc. pero un ejecutable es todo lo contrario. Seguro que quien esté interesado consigue compilarlo.
Puedes incluir el ejecutable, con cuidado de revisar antes con el antivirus, pero debe ir todo el código fuente.

Toni 26-07-2012 13:53:15

Problemas utilizando esta libreria en W2008 Server
 
Hola a todos,

Alguien tiene idea porque puede fallar este modulo de encriptacion AES256 que utilizo en este ejecutable por el momento solo en servidores con Windows 2008 Server 64 bits?

La funcion que encripta retorna una cadena vacia, en lugar de la cadena encriptada.. :mad:

En el resto de maquinas que he probado me ha funcionado bien. Sobretodo si alguien utiliza esta utilidad que tenga la precaución de hacer un backup primero de la base de datos.

Saludos!

escafandra 27-07-2012 12:47:58

Yo revisaría las fuentes. :cool: :D

Saludos.


La franja horaria es GMT +2. Ahora son las 06:22:55.

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