众所周知,用户登录密码直接使用明文保存是非常不安全的。如果数据库内容被窃取,密码就被泄露了。
所以密码都会以某种方式加密后,再保存到数据库,这样即使数据库内容被窃取了,依然无法知道用户的登录密码。常用的加密方式有MD5、Sha1。Jspxcms使用的是Sha1加密。
针对加密的密码,可以使用彩虹表破解。因此直接对密码进行加密,也不够安全。需要在原密码的基础上加上一些随机数,再进行加密,这个随机数就是所谓的Salt。由于salt是随机数,每个用户的salt都是不一样的,即使是同一用户,每次修改密码,salt都会改变。也就是说,即使两个用户的原密码一样,加密后的密码都是不一样的。
Jspxcms8.X代码及数据库相关说明。
对应的表:cms_user
。对应字段:f_password
(sha1加密后的密码),f_salt
(用于混淆密码的随机数,防止彩虹表破解)。
加密的配置com.jspxcms.core.ShiroConfig
@Bean("credentialsDigest")
public SHA1CredentialsDigest credentialsDigest() {
return new SHA1CredentialsDigest();
}
登录时shiro对应的代码com.jspxcms.core.security.ShiroDbRealm
@Autowired
public void setCredentialsDigest(CredentialsDigest credentialsDigest) {
this.credentialsDigest = credentialsDigest;
}