我有一个使用spring security的spring mvc 3.0 webapp。我已经在spring security登录服务中实现了一个基本的json服务,但就我而言,它还不够确定。
在我的json请求中,我以纯文本形式传递以下类型。
{"j_username":"myPlainTextUsername", "j_password":"myPlainTextPassword" , "j_store":"1"}
我的所有密码都使用直接md5加密存储在数据库中。我的应用程序使用以下spring配置。
<beans:bean id="userDetailsDao"
class="com.mycompany.reporting.dao.UserDetailsDaoImpl"/>
<beans:bean id="encoder"
class="org.springframework.security.authentication.encoding.Md5PasswordEncoder"/>
<beans:bean id="authenticationProvider"
class="org.springframework.security.authentication.dao.DaoAuthenticationProvider"
p:userDetailsService-ref="userDetailsDao"
p:passwordEncoder-ref="encoder" />
<authentication-manager alias="authenticationManager" erase-credentials="false">
<authentication-provider ref="authenticationProvider"></authentication-provider>
</authentication-manager>
我没有把明文密码放在json请求中,而是想通过包含一个md5哈希值的字符串来尝试改进它...
- 用户名(盐)
- 网址(盐)
- 密码
醇>
然后我希望能够解密,将盐与密码分开,然后进行身份验证。我知道spring security允许使用salt,但我认为只有在密码与db一起存储时才有用。
有人可以帮我提一下如何做到这一点吗?春天有什么东西可以帮助我做我想做的事吗?
非常感谢
答案 0 :(得分:0)
AFAIK,md5并非不可逆转。因此,如果您获得密码的md5哈希值,则只能将其与存储在数据库中的md5哈希值进行比较。如果两个哈希都使用相同的盐,那么比较只会有意义。
如果是一个选项,对登录页面使用https并继续以明文形式发送密码会更简单 - 但是通过https加密频道。
如果没有,您将必须将密码以纯文本形式存储(或使用可逆编码,这看起来更好但不会真正提高安全性),以便能够在两侧进行相同的散列并比较散列值。