Jasypt

Hola, buenas tardes a todos!!

Estoy trabjando con la clase de jasypt para encriptación utilizando hibernate, y todo ha funcionado a la perfección, pero al momento realizar un query, el resultado dle query me trae la información encriptada, hay alguna forma de que el query me traiga la información desencriptada.

De antemano mil gracias por su ayuda.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

no tan transparente?

La página de Jasypt anuncia tener integración transparente con Hibernate; si estas teniendo este problema, entonces tal vez no es tan transparente la integración, o estás usando una versión vieja de Jasypt (o de Hibernate), o una versión demasiado nueva de Hibernate que Jasypt todavía no soporta, o algo tienes mal configurado... no conozco Jasypt, nunca la he usado, asi que no sé qué más pueda ser, además de que prácticamente no diste nada de información en tu post... estas usando encripción simétrica, supongo?

Imagen de Lusaby

como lo hago..

Ah , ok, mira lo que hago es lo siguiente, primero en mi main principal defino mi encriptor y lo registro:

StandardPBEStringEncryptor strongEncryptor = new StandardPBEStringEncryptor();
HibernatePBEEncryptorRegistry registry = HibernatePBEEncryptorRegistry.getInstance();
strongEncryptor.setPassword("jasypt");
strongEncryptor.setSaltGenerator( new ZeroSaltGenerator());
registry.registerPBEStringEncryptor("strongHibernateEncryptor", strongEncryptor);

Una vez registrado en mi xml defino los tipos de encriptación que utilizaré:
 
una vez definido a mis campos a utilizar en la forma les asigno el tipo encriptado
 
y ya listo.. puedo trabajar sin problemas, me muestra en mi forma el valor desencriptado, pero en mi tabla d ela base de datos, me guarda los valores encriptados, hasta ahí no hay ningún problema, todo en orden, peor una vez que quiero hacer un select a la tabla encriptada, me lo hace sin ningún problema, pero los registros que obtengo de ese select vienen encriptados y pues lo que necesito es ver alguna manera de a ese select enviar algún parámetro para indicarle que el resultado lo quiero desencriptado.

Gracias por su ayuda.

Imagen de ezamudio

Por fuera de Hibernate?

La idea de Jasypt con Hibernate es que los datos se guarden encriptados en la base de datos. Obviamente si das un SELECT por fuera de Hibernate a la tabla, verás los datos encriptados, esa es la idea! Si quieres descifrar una columna cifrada, necesitas hacer lo mismito que hace el Encryptor de Jasypt. No debe ser difícil, por lo que veo es PBE (Password-Based Encryption), tienes el password que usas, y tienes la sal que probablemente sean puros ceros por el nombre de la clase... Es cosa de que leas si ese StandardPBEStringEncryptor usa PKCS#5 o algo similar para generar la llave de encripción, saber qué algoritmo de encripción usa así como el modo (CBC, CFB, etc) y con eso tal vez puedas hacer una función nativa en tu servidor de base de datos para decriptar una cadena pasándole el password.

Pero más allá de esto, cuál es la finalidad de encriptar los datos? Qué tipo de datos vas a encriptar? De quién los quieres proteger? Necesitas saber todo eso para tener un buen diseño de seguridad; de otra forma solamente estás dando una falsa ilusión de que el sistema está protegido. En este caso particular, hay un solo password para proteger TODOS los datos que usen el tipo "encrypted", y por lo visto ni siquiera varía la sal para el bloque inicial, por lo que cualquiera que tenga ese password puede descifrar los datos. Además de que nunca podrás cambiar el password porque entonces ya no podrás descifrar todos los datos que ya están almacenados con el password actual. Puede que en algunos casos eso sea útil, pero como te digo, depende mucho de qué estás tratando de lograr con esto; si es proteger los datos del DBA nada más, pues podria ser suficiente, siempre y cuando no tenga acceso a la configuración de tu aplicación, en donde viene el password en claro. Si quieres ofrecer confidencialidad a los clientes incluso de ti mismo, necesitas que cada usuario tenga un password y usarlo como base para la llave que se genera para encriptar los datos de ese usuario (y cada usuario tendrá una llave diferente y tu sistema no la tiene, por lo que el usuario puede estar tranquilo sabiendo que nadie puede ver su info confidencial).

Imagen de Lusaby

Gracias!!

Si ya, estuve haciendo lo de la desencriptación y pues después de todo, ya presenté un análisis de pros y contras de usar el jasypt de acuerdo a los requerimientos del sistema, muchas gracias por tu ayuda y comentarios.