Invocar desde Java a una funcíon hecha en Visual Basic
Buen día a todos.
Nuevamente me encuentro por aquí compartiendo mi problemática.
Actualmente me solicitan encriptar cadenas de texto usando el algoritmo Rijndael, pero dicha tarea se está realizando, en un principio, usando Visual Basic.
Ya hice pruebas usando la librería de BouncyCastle y no obtengo el mismo resultado. La verdad es que las personas que usan Visual Basic nos brindan muy poca información. Lo único que nos dieron fue la implementación completa del algoritmo en visual basic. Por esto, se me ocurrió crear una dll apartir de este código y después invocarla desde Java, usando JNA.
Hasta el momento no he podido conseguirlo ya que me sale la siguiente excepción:
Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function 'Suma': No se encontró el proceso especificado.
La función Suma la hice yo dentro de la clase que encripta, solo para corroborar que puedo invocar alguno de los métodos, pero no lo he logrado.
Mi código es el siguiente:
¿Alguna idea de como puedo solucionar esto?
De antemano gracias a todos y que tengan un excelente año, si se puede, lejos de Micro$oft :)
- Inicie sesión o regístrese para enviar comentarios
Re: invocar función VB
Existe una librería llamada jawin tal vez te sirva, http://nachxs.wordpress.com/2009/01/08/jawin-llamar-metodos-de-una-dll-con-java/
Hay mucha información sobre ese algoritmo en Internet, claro que sería bueno que postearas un pos más el código.
Por lo que se ve
no encuentra el método Suma
Haber si te sirve de algo este link http://www.codebase.com/support/kb/?article=C01032
0_o
Gracias por la Respuesta
Efectivamente, he buscado información sobre el algoritmo y es abundante, pero crear una implementación en java me resulta difícil debido a que es muy poco el tiempo que tengo para desarrollo.
También ya intenté usar jawin y no lo logré, por lo que leí, solo aplica para dll's creadas con C, C++ y Visual C++, no para las creadas con Visual Basic.
Y respecto al último link que me compartes, al parecer solo es cuando no encuentra la dll, en mi caso si la encuentra pero no puede acceder a la función Suma, la cual como les comento, fue definida por mi en Visual Basic.
Algo que se me hace raro es que para el algoritmo hecho en Visual Basic, la llave que usan es de 11 bytes y según entiendo, debería ser múltiplo de 16 bytes, o me equivoco?? de ser así, desconozco totalmente si hacen algún tipo de padding para la llave.
Gracias, saludos cordiales...
Rijndael
Rijndael es básicamente AES; ni siquiera necesitas BouncyCastle pues este algoritmo viene el JDK.
Pero aparte del algoritmo, sí es importante que uses exactamente el mismo procedimiento para cifrar los datos. Tienes acceso al código en VB? porque tal vez sea mejor implementar ese procedimiento en Java y te ahorras la llamada a la DLL.
Consideraré implementarlo en Java
Gracias ezamudio.
Como bien comentas, también intenté usar la implementación que viene con el jdk pero sin éxito.
Tengo el código en VB, lo que me comentaba otro desarrollador que estuvo analizando ésta situación fue que hay una librería en VB que no existe en Java, y por lo tanto la implementación se complicaría. De cualquier forma considero esta opción.
Otra forma que encontré y se me hizo más sencilla, es publicar un WS de VB en el local y cada vez que necesite encriptar lo invoco.
No sé que tanto sea recomendable (en especial por rendimiento), considerando que tengo poco tiempo para desarrollo.
Saludos.
lento
Pues lo único más lento que un web service para cifrar datos, sería que tuvieras a unos monitos con ábacos...
Bueno tal vez no. Tal vez sería más lento ejecutar un programa externo cada vez que quieres cifrar algo.
Sin duda
Concuerdo con tu comentario ezamudio, pero al exigirme dar una solución rápidamente, se optó por utilizar el WS.
De cualquier forma gracias por la ayuda y si me es posible intentaré implementar el algoritmo en futuras versiones.
Saludos....