业务功能开发-登录(一)

最近在学习JFinalUIB,很多东西粗略看过,却做不到深刻理解,就像泰戈尔说的一样,真的留不下痕迹~~~

天空中不留下飞鸟的痕迹,但我已飞过(I leave no trace of wings in the air,but I am glad I have had my flight.)

但是学习这回事,我想还是值得留下鸟屎的,肥沃了土地,长出了花草,需要的时候沿着花草就找到了。这里做一下读书笔记,因为用的就是JFinalUIB框架,很多东西都董华健老师写好了的,所以我这里所谓的笔记,也就是在JFinalUIB的基础上加上一点自己的理解。(话说JFinalUIB极速开发实战这本书市价55.55而且还只有电子版的真的好贵的说~不过对我等凡人还是很有帮助的,感谢董华健老师~~~)

加盐+加密

正常人考虑登录的情况应该就是,用户密码需要具有隐私性,不好被人知道的,至于其他人的不需要加密,或者根本不需要密码就不在考虑之列了。

通常情况下,为了保证用户账号信息的安全,一般会将用户的密码信息,加密后存储到数据库,不会存储明文密码。

如何保证用户登录时提交密码已经加密?

直接对重要数据进行MD5处理后,反向解密确实难度很大,但还是可以找出破绽的,可以查看数据库,如果别人的密码加密后和自己的一样,就可以登录别人的账户的,那么我们以前的加密方法是否对这种行为失效了呢?其实只要稍微混淆一下就能防范住了,这在加密术语中称为“加盐”。具体来说就是在原有材料(用户自定义密码)中加入其它成分(一般是用户自有且不变的因素),以此来增加系统复杂度。当这种盐和用户密码相结合后,再通过摘要处理,就能得到隐蔽性更强的摘要值。

先加盐,再加密

盐可以用用户名,或者是用户注册时的邮件,注册时间等非空信息(如果是空信息这个加盐处理会失效)。

存储

密码存储:这里,用户的密码信息时使用PBKDF 2加密后存储的,PBKDF 2是一种不可逆加密算法。在存储前会先生成一个密码盐,然后使用它来加密密码,最终得到加密的密文,并且同时存储到用户表中,这个过程是不可逆的。

demo:userService.java

save

 

// 密码加密
byte[] salt = ToolPbkdf2.generateSalt();// 密码盐
byte[] encryptedPassword = ToolPbkdf2.getEncryptedPassword(password, salt);
user.set(User.column_salt, salt);
user.set(User.column_password, encryptedPassword);

// 保存用户信息
userInfo.save();

// 保存用户
user.set(User.column_userinfoids, userInfo.getPKValue());
user.set(User.column_errorcount, 0);
user.set(User.column_status, "1");
user.save();

// 缓存
User.dao.cacheAdd(user.getPKValue());

 

posted @ 2016-04-27 14:46  景行彼高松  阅读(312)  评论(0编辑  收藏  举报