zoukankan      html  css  js  c++  java
  • 业务功能开发-登录(一)

    最近在学习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());
  • 相关阅读:
    CentOS下Zabbix安装部署及汉化
    用jmeter通过ssl验证访问https
    VMware安装CentOS时,无法以图形界面安装解决办法
    MySQL数据库不能远程访问的解决办法
    CentOS搭建LNMP环境
    jstack+top定位性能问题
    用Fiddler模拟低速网络环境
    Linux下history命令用法
    Jmeter3.0发布,版本更新都更新了什么
    【转】gc日志分析工具
  • 原文地址:https://www.cnblogs.com/tongx123/p/5438060.html
Copyright © 2011-2022 走看看