生成密码方法
1. SystemService # entryptPassword 方法
/**
* 生成安全的密码,生成随机的16位salt并经过1024次 sha-1 hash
*/
public static String entryptPassword(String plainPassword) {
String plain = Encodes.unescapeHtml(plainPassword);
byte[] salt = Digests.generateSalt(SALT_SIZE);
byte[] hashPassword = Digests.sha1(plain.getBytes(), salt, HASH_INTERATIONS);
return Encodes.encodeHex(salt)+Encodes.encodeHex(hashPassword);
}
2. 调用测试
public static void main(String[] args) {
String password = entryptPassword("123456");
System.out.println("password = " + password);
}
验证密码
1. SystemService # validatePassword 方法
/**
* 验证密码
* @param plainPassword 明文密码
* @param password 密文密码
* @return 验证成功返回true
*/
public static boolean validatePassword(String plainPassword, String password) {
String plain = Encodes.unescapeHtml(plainPassword);
byte[] salt = Encodes.decodeHex(password.substring(0,16));
byte[] hashPassword = Digests.sha1(plain.getBytes(), salt, HASH_INTERATIONS);
return password.equals(Encodes.encodeHex(salt)+Encodes.encodeHex(hashPassword));
}
修改密码
@Transactional(readOnly = false)
public void updatePasswordById(String id, String loginName, String newPassword) {
User user = new User(id);
user.setPassword(entryptPassword(newPassword));
userDao.updatePasswordById(user);
// 清除用户缓存
user.setLoginName(loginName);
UserUtils.clearCache(user);
// // 清除权限缓存
// systemRealm.clearAllCachedAuthorizationInfo();
}