APIS de encriptacion???

Buenas tardes, quisiera preguntar, si alguno ha trabajado con alguna api de encriptación, tanto para cadenas de caracteres como para archivos, si es así, quisiera saber si tienen a la mano ejemplos o referencias a páginas.... he echado un vistazo a la página de bouncy castle... sus librerías son muy buenas, pero no la documentación.... así que si alguien tiene algo de material, pues gracias...

Saludos a todos...

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

caracteres?

En JavaSE no necesitas Bouncy Castle, a menos que quieras trabajar ya con cosas de bajo nivel. Qué tipo de encripción quieres usar? Llave simétrica? asimétrica (también conocida como lllave pública)? Algún algoritmo en específico (AES, DES, TDES, Blowfish, etc)? Los algoritmos de encripción simétrica por bloques (los más comunes) requieren ser inicializados con una llave y encriptan bloques de bytes, no hay encripción directamente por caracteres sino que tienes que convertir los caracteres a bytes, y el resultado de cifrar datos siempre van a ser bytes, datos binarios; si los quieres guardar como texto hay que codificarlos en base 64 o hexadecimal.

Antes de usar las clases de java.security y javax.crypto te recomiendo que leas un poco acerca de criptografía en general y que hagas un muy buen análisis de lo que requieres. Si estás pensando en meter algo de criptografía en un sistema o aplicación es porque probablemente requieren algo de seguridad. La criptografía por sí misma no va a ser una panacea si no la aplican bien.

Por ejemplo, si quieres encriptar passwords de usuarios en una base de datos, realmente no necesitas cifrarlos sino guardar una digestión. No deberías usar un algoritmo simétrico porque eso permitiría descifrar los datos (además de que requieres manejar alguna llave en común para cifrar/descifrar los datos), por eso mejor sacas un MD5, SHA-1 o SHA-256 del password en conjunto con algún dato que varía en cada usuario pero que no sea fácil de cambiar por el usuario (su llave primaria, su mail, o su username si es que ya no lo puede cambiar, etc). De esta forma no necesitas manejar llaves, los passwords no son "desencriptables" y solamente cada usuario puede saber qué password puso, y si dos usuarios usan el mismo password, en la base de datos no se nota.

Tienes que conocer muy bien la naturaleza de los datos que deseas proteger para poder diseñar e implementar un buen esquema de seguridad, ya la implementación criptográfica ya será lo de menos, y en cambio si se enfocan en usar AES con llaves de 192 bits para encriptar números de tarjeta de crédito pero la llave es una vil passphrase constante, no usan sal para cada tarjeta, y la llave está en un lugar de fácil acceso (como un string constante en el código o en algún archivo XML etc), la seguridad es nula, es casi como no haber encriptado los datos.

Imagen de ezamudio

Literatura

En Wikipedia hay algunas buenas descripciones de ciertos conceptos, por ejemplo la página de Criptografía, Criptografía simétrica, asimétrica, los modos de cifrado por bloques, cifrado por flujo, etc.

Imagen de ezamudio

Ejemplos

En cuanto a ejemplos, aquí hay unos de una plática que di acerca de criptografía en Java. El código es GPL y no es realmente muy útil (te aviso para que no vayas a copiar y pegar en tu aplicación), pero ilustra los conceptos de los distintos algoritmos, modalidades, etc.

No hay código directamente para hacer sólo una digestión, algo como PBE (Password-Based Encryption) pero ese algoritmo no es difícil ya que manejas bien el cifrado por bloques y una digestión (en los ejemplos se hace digestión para firma digital). Revisa el estándar PKCS#5 para ver cómo se deben cifrar datos usando una contraseña como base.

Imagen de neko069

Pues gracias....

Gracias ezamudio, como siempre con respuestas prontas y acertadas, en realidad no tengo aplicación por ahora, pero un amigo me estuvo platicando hace unos días de un requerimiento para encriptación de contraseñas, y se me hizo interesante, mencionó lo de las apis de bouncy castle, y pues ahí me tienes buscando algo de información, y con lo que me dices, pues me voy a entretener un rato (como si no tuviera que hacer tratando de echar a andar jsf y sus variaciones...) muchas gracias por la información...