Java登录加密。【非shiro框架】

使用org.apache.commons.codec包中的相关方法完成登录用户的加密。

1、用户注册。用户输入用户名,密码完成注册。

2、后台加密。可以使用用户名+密码组合加密,也可使用密码+盐值加密。调用org.apache.commons.codec中的相关加密方法完成自由组合加密。

3、用户验证。根据之前的加密方式再次生成一次加密码,对比与数据库存储的密码。



org.apache.commons.codec中提供了很多加密方法,可以用反编译工具打开看看。

网盘地址:              下载地址             




简单的加密举例:

public class UserServiceImpl implements UserService {

	private UserDao userDao=new UserDaoImpl();
	
	
	public User regist(User user) throws SQLException {
		if(user==null){
			return null;
		}
		//得到一个盐值
		String salt=gengeratorSalt();
		user.setSalt(salt);
		
		//String saltSign=user.getAccount()+salt+user.getPassword();
		String saltSign=salt;
		//String passwordDigist=DigestUtils.md5Hex(saltSign);
		String passwordDigist=Md5Crypt.apr1Crypt(user.getPassword(), saltSign);
		user.setPasswordDigist(passwordDigist);
		
		return userDao.save(user);
	}

	@Override
	public User auth(String account, String password) throws SQLException {
		User user=userDao.findByAccount(account);
		if(user==null){
			return null;
		}
		Date lastLoginTime=user.getLastLoginTime();
		//验证密码
		String salt=user.getSalt();
		String p1=Md5Crypt.apr1Crypt(password, salt);
		//比较两个密码
		if(p1.equals(user.getPasswordDigist())){
			//登录成功 修改最后一次登录的时间
			user.setLastLoginTime(new Date());
			user=userDao.update(user);
			user.setLastLoginTime(lastLoginTime);
			return user;
		}
		
		return null;
		
	}
	
	/**
	 *产生随机的盐值(盐值可以按照自己的想法随意生成,并保存在数据库中以便验证) 
	 * @return
	 */
	private String gengeratorSalt(){
		String str="abcdefghijklmnopqrstuvwxyz0123456789";
		StringBuilder sb=new StringBuilder();
		int length=16;
		Random random=new Random(System.currentTimeMillis());
		for(int i=0;i<length;i++){
			sb.append(str.charAt(random.nextInt(str.length())));
		}
		return sb.toString();
	}

}


测试类:

public class TestUserService {
	private UserService userService;
	@Before
	public void setUp(){
		userService=new UserServiceImpl();
	}
	@After
	public void tearDown(){
		userService=null;
	}
	
	@Test
	public void testRegist() throws SQLException{
		String nikename="赵日天", 
				account="zhaoritian@126.com", 
				phone="15945682451",
				password="123456";
			
		User user=new User(nikename,account,phone,password);
		user=userService.regist(user);
		Assert.assertNotNull(user.getId());
		
		
	}
	
	@Test
	public void testAuth() throws SQLException{
		String account="zhaoritian@126.com", password="123456";
		User user=userService.auth(account, password);
		Assert.assertNull(user);
	}
	
}


结果:


org.apache.commons.codec包中的方法还有很多,有待继续研究。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值