2011-11-02 20 views
6

Necesito guardar una contraseña de db como una cadena cifrada y luego descifrarla antes de conectarla.Biblioteca de cifrado bidireccional Java

¿Alguien me puede recomendar una buena biblioteca de encriptación bidireccional en Java?

+3

Si encripta sus contraseñas usando encriptación basada en contraseña (una técnica bidireccional) y un atacante conoce su contraseña de encriptación, todas sus contraseñas de usuario serán revelado (y, probablemente, todo a la vez). Si no tiene esa contraseña de cifrado (o clave) para poder descifrar, este riesgo desaparece y el atacante tendrá que confiar en la fuerza bruta o estrategias similares. Encontrado [AQUÍ] (http://www.jasypt.org/howtoencryptuserpasswords.html) – AndroidHustle

+4

Esto es correcto. La contraseña siempre debe ser [_hashed_] (http://en.wikipedia.org/wiki/Hash) y no está encriptada. – dwalldorf

+7

@entek: Creo que malinterpretas la pregunta, mientras la leo no se trata de almacenar contraseñas de usuario, sino la contraseña para acceder a la base de datos. Necesitará el usuario de DB y la contraseña para conectarse. Ahora, para una aplicación web esto debería ser manejado por el servidor de aplicaciones a través de recursos JNDI y almacenando las contraseñas de forma segura, pero si está escribiendo una aplicación Java Plain Old, que accede a la base de datos a través de JDBC, necesitará la contraseña en alguna parte . Y dejarlo en texto plano no es la manera de hacerlo, así que el cifrado de una contraseña es definitivamente un caso de uso válido ... – beny23

Respuesta

1

En términos reales de seguridad de la codificación Base64 será casi tan bueno como cualquier cifrado "duro".

(controversias en los comentarios :).)

Editar: OK, la reciente downvote me trajo de vuelta aquí para añadir algunas palabras.

La declaración anterior está destinada a recordar a las personas que es imposible para tener cualquier actividad automatizada de autenticar de forma segura a otra parte. Si usa una contraseña para cifrar y descifrar una contraseña almacenada, ¿dónde almacenaría esta nueva contraseña? ¡Fácil! Simplemente cree una tercera contraseña para almacenar de forma segura la segunda contraseña y así sucesivamente.

El punto es: Cualquier contraseña que se pueda descifrar por algún procedimiento automático es, de hecho, no encriptada pero simplemente ofuscada. Por lo tanto, el cifrado es inútil en primer lugar.

+1

No es perfecto, pero es aún mejor. Tienes razón en que tendrías que seguir agregando una contraseña además de la contraseña ... pero dejarla a la vista podría ser peor. Supongamos que está almacenando contraseñas para que un servicio externo se autentique en nombre de los usuarios. Si lo almacenó en texto plano y su base de datos (solo) fue violada, obtendrían las contraseñas. Si los cifraste y almacenaste la clave en un archivo (y la memoria de la aplicación en tiempo de ejecución) y la base de datos (solo) se violó, el atacante tendría que aplicar fuerza bruta a la clave de descifrado. Usar una sal por registro los ralentizaría aún más. –

+1

Por supuesto que tienes razón. Sin embargo, dices "y tuviste la clave almacenada en un archivo" ... Y si ese archivo un día hace un viaje a Internet, todo se ha ido otra vez.Supongo que todo se reduce a la técnica del mejor esfuerzo para dividir de algún modo la información requerida y esperar que nadie pueda echarle un vistazo a * todas * las partes individuales. – JimmyB

+0

Claro, totalmente de acuerdo! –

1

Por lo general, las contraseñas se guardan como hash, por lo que no es posible obtener la contraseña real. Además de convertirla, lo que hacemos es convertir la contraseña ingresada en un hash y luego unirla. Si puede explicar más sobre su caso de uso será claro

+1

también hashing y encriptación son dos cosas, encription es una forma en la que puede convertir de nuevo, pero hashing es un camino de una sola dirección. –