none
ClsCrypto encriptar/desencriptar archivos. Clase de Vb6 RRS feed

  • Pregunta

  • Buenos dias,

    Hace tiempo con vb6 usaba una clase crypyto para encriptar/desencriptar archivos.

    Hay muchos archivos almacenados en la BBDD usando esa clase.

    Ahora toca migrar esa utilidad a .net y me encuentro incapaz de hacer funcionar esa clase desde .net

    La clase en su dia la descargue de este enlace:

    http://www.recursosvisualbasic.com.ar/htm/ocx-componentes-activex-dll/52-dll-para-encriptar-archivos.htm

    En el punto 3: 

    3 - Módulo de clase para encriptado y desencriptado de archivos de texto

    Este módulo llamado ClsCrypto , es programado por Microsoft, y permite mediante una serie de métodos , encriptar y desencriptar ficheros de texto, y también crearle una clave o password para poder desencriptarlo

    En codigo de ejemplo de vb6 esta aqui: http://www.recursosvisualbasic.com.ar/htm/ocx-componentes-activex-dll/zip/FileEncrypt.zip

    ¿Alguna sugerencia de como hacer funcionar esa clase desde .net? , ¿algun otro consejo?

    saludos,

    jesus

    martes, 14 de agosto de 2018 8:53

Respuestas

  • He estado echándole un vistazo a la clase, y en principio no veo nada que no se pueda migrar a VB.NET si se tiene un poco de cuidado al hacer la migración. Por ejemplo, los "Long" de VB6 son de 32 bits, por loo que deben cambiarse por "Integer" en VB.NET, en lugar de "Long", y me imagino que surgirán otras pocas cosillas de este estilo al revisar detenidamente el código. Para no tener que rectificar uno por uno todos los "Declare Function", se podrían tomar las correspondientes declaraciones para .NET desde pinvoke.net, pero el resto del código tendrá que revisarse a mano.

    Si no quieres trabajar haciendo la migración a .Net, otra opción sería compilar el código de VB6 en una DLL, registrarla en Windows como objeto COM, y luego desde .NET añadir una referencia de tipo COM para consumirlo. Esto es una pequeña "chapuza", pero si solo lo necesitas temporalmente para poder leer los archivos que están cifrados, puede ser una alternativa viable.

    martes, 14 de agosto de 2018 14:00

Todas las respuestas

  • He estado echándole un vistazo a la clase, y en principio no veo nada que no se pueda migrar a VB.NET si se tiene un poco de cuidado al hacer la migración. Por ejemplo, los "Long" de VB6 son de 32 bits, por loo que deben cambiarse por "Integer" en VB.NET, en lugar de "Long", y me imagino que surgirán otras pocas cosillas de este estilo al revisar detenidamente el código. Para no tener que rectificar uno por uno todos los "Declare Function", se podrían tomar las correspondientes declaraciones para .NET desde pinvoke.net, pero el resto del código tendrá que revisarse a mano.

    Si no quieres trabajar haciendo la migración a .Net, otra opción sería compilar el código de VB6 en una DLL, registrarla en Windows como objeto COM, y luego desde .NET añadir una referencia de tipo COM para consumirlo. Esto es una pequeña "chapuza", pero si solo lo necesitas temporalmente para poder leer los archivos que están cifrados, puede ser una alternativa viable.

    martes, 14 de agosto de 2018 14:00
  • Gracias Pablo por tu respuesta.

    Efectivamente he probado la migración cuidando los detalles entre lenguajes y siempre obtengo un error 87 duringDecrytp o algo similar.

    Voy a intentarlo de nuevo por si acaso se me escapó algún otro detalle.

    La idea de la dll ya se me paso por la cabeza, de hecho no solo prepare una dll para como bien dices referenciarla desde .net sino que ademas me hice un exe (tools.exe) que lee como argumentos el fichero a encriptar, el fichero destino encriptado y la pass usada en la encriptacion. 

    De esta forma:

    para encriptar el fichero file.pdf con la contraseña pass uso: tools E,c:\file.pdf,c:\file.enc,pass

    y para desencritar: tools D,c:\file.ENC,c:\file.pdf,pass

    Es evidente que es mucho mas elegante hacer que funcione la clase desde el propio codigo .net. Para algo provisional escapo así pero no me quedo muy conforme por lo que voy a intentar nuevamente migrar la clase.

    Muchas gracias, saludos,

    Jesus

    martes, 14 de agosto de 2018 19:38
  • Alberto, buenos dias,

    Al final despues de desistir seguir investigando que pasaba con las llamadas al API desde vb.net, opte por la solucion de la dll. Cree la dll, la referencie  en el proyeto .net y listo. El interop.dll se distribuye y ejecuta sin problemas en los pc clientes.

    gracias nuevamente por la ayuda,

    saludos,

    Jesus

    jueves, 16 de agosto de 2018 11:27