2011-04-14 4 views
7

Me gustaría agregar salting con contraseña a un sitio en el que estoy trabajando, y descubrí que Spring Security 3.1 tiene algunas características nuevas para hacer esto muy fácil de hacer.¿Cuál es el uso más apropiado de StandardPasswordEncoder para las contraseñas de salazón en Spring security 3.1?

Tengo una pregunta acerca de la clase StandardPasswordEncoder. Funciona un poco diferente de lo que yo esperaría. Parece más fácil de usar que codificar yo mismo la salazón, pero creo que hay algo de "magia" que no entiendo.

StandardPasswordEncoder parece saldar aleatoriamente el hash para mí, lo cual está bien. Pero al hacer coincidir la contraseña original con la contraseña codificada ... ¿cómo es posible hacer coincidir las contraseñas sin saber cuál era la sal original en primer lugar?

Según tengo entendido, una vez que se hace una sal, no se puede retroceder ... así que si hay una sal aleatoria para generar el hash codificado en primer lugar ... ¿cómo es que StandardPasswordEncoder puede coincidir con el contraseña en un punto posterior? Estoy confundido. ¿No debería tener que obtener la sal, conservar la sal en la base de datos y luego suministrar la sal? ¿Cómo es posible hacer esto sin que yo almacene y proporcione el valor de sal?

Gracias por aclarar la confusión. Espero que mi pregunta tenga sentido.

Respuesta

4

Almacena la contraseña hash concatenada con la sal, consulte StandardPasswordEncoder.java, por lo que conoce la sal al verificar la contraseña.

+1

Acabo de usarlo de la misma manera que llamaría DigestUtils.md5() en Apache commons. Lo utilicé una vez para crear una sal, y nuevamente para crear la contraseña hash final. Luego creé un proveedor de autenticación personalizado para la seguridad de Spring que fusionó la sal y coincidió con la contraseña hash usando el valor sal en la base de datos. Funciona genial. Me gustaría que ofrecieran esto "de fábrica", pero bueno. – egervari

Cuestiones relacionadas