springsecurity 中的md5 + salt 加密

<s:authentication-provider user-service-ref="userDetailsService">
<!-- 可设置hash使用sha1或md5散列密码后再存入数据库 -->
<s:password-encoder hash="md5" >
<s:salt-source user-property="username"/>
</s:password-encoder>
</s:authentication-provider>

这里设置成username为salt,进行md5加密。

那么在用户注册的时候应该把密码进行加密。可以用Md5PasswordEncoder这个类,是springsecurity内置的一个类。

Md5PasswordEncoder md5 = new Md5PasswordEncoder();
System.out.println( md5.encodePassword("admin", "admin"));

其中encodePassword()函数的第一个参数是密码,第二个参数是salt值。

那么encodePassword()函数是怎么样吧rawPass和salt值结合起来的呢?
找了一下源代码发现

protected String mergePasswordAndSalt(String password, Object salt, boolean strict) {
if (password == null) {
password = "";
}

if (strict && (salt != null)) {
if ((salt.toString().lastIndexOf("{") != -1) || (salt.toString().lastIndexOf("}") != -1)) {
throw new IllegalArgumentException("Cannot use { or } in salt.toString()");
}
}

if ((salt == null) || "".equals(salt)) {
return password;
} else {
return password + "{" + salt.toString() + "}";
}
}

在调用此函数时,也就是返回 rawPass{salt}。Md5PasswordEncoder是将strict参数设置为false。那么就不会检查salt值中是否含有 '{' 和 '}' 。我试了一下,如果salt中含有大括号的话,加密过后的密封是无法使用的。就是说用户虽然注册了,但是无法登陆。(这个可能和加密算法有关?)

版本:2.0.5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值