发表于: 2018-01-21 22:47:25
1 705
今天完成的事情:
1.MD5( Message Digest Algorithm)信息摘要算法,用于确保信息传输完整一致。又叫,摘译算法,哈希算法。
特点:
1.压缩性:任意长度的数据,算出的MD5值长度是固定的。
2.容易计算:从原数据计算出MD5值很容易。
3.抗修改性:对原数据进行任何修改,哪怕只修改1个字符,所得到的MD5值的区别很大。
4.强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(伪造数据)是非常困难的。
登陆系统中使用:
如果不使用加密算法,存在数据库中的密码是明文,如果数据库被不正当进入,用户的账号信息就完全暴露了。因此是用加密算法。
1.用户注册账号以后,密码经过MD5算法加密,然后存储到数据库中。
2.用户登陆的时候,对用户输入的密码计算出MD5加密后的值,然后到数据库比对,如果比对相同,则登陆成功。
java MD5实现:
import java.math.BigInteger;
import java.security.MessageDigest;
public class MD5 {
public static String getMD5(String str) {
String out = null;
try {
//生成一个MD5加密计算摘要
MessageDigest md = MessageDigest.getInstance("MD5");
//计算MD5函数
md.update(str.getBytes());
// digest()最后确定返回md5 hash值,返回值为8为字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符
// BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值
out = new BigInteger(1, md.digest()).toString(16);
} catch (Exception e) {
e.printStackTrace();
}
return out;
}}
写一个注册controller和jsp
//注册
@RequestMapping(value = "/register",method = RequestMethod.GET)
public String registerget(){
return "register";
}
@RequestMapping(value = "/register",method = RequestMethod.POST)
public String registerpost(
@RequestParam("userName") String u,
@RequestParam("userPassword") String pw) {
student1.setUserName(u);
logger.info("setname ok");
student1.setPassWord(MD5.getMD5(pw)); //把用户输入的密码使用MD5加密,然后存入数据库
logger.info("setpassword ok");
Date day = new Date();
student1.setCreateTime(day);
student1.setUpdateTime(day);
logger.info("settime ok");
studentMapper.insert(student1);
return "login";
}
会得到一个32位的字符串。
登陆验证:
//使用md5加密,然后和数据库中存储的内容对比。
String md5password = MD5.getMD5(pw);
if(u.equals(student.getUserName()) && md5password.equals(student.getPassWord()))
2.深度思考
1.什么是session?什么是cookie?session和cookie有什么区别?什么场景适用于session?什么场景适用于cookie?
1.Cookies:通过客户端来保持状态信息
Cookie是服务器发给客户端的特殊信息("key","value")
cookie是以文本的方式保存在客户端,每次请求时都带上它
适用场景:客户端记住账号和密码,及个人喜好设置。
2.Session:通过服务器端来保持状态信息
Session是服务器和客户端之间的一系列的交互动作
服务器为每个客户端开辟内存空间,从而保持状态信息
由于需要客户端也要持有一个标识(id),因此,也要求服务器端和客户端传输该标识,
标识(id)可以借助Cookie机制或者其他的途径来保存
每次客户端发送请求,服务端都检查是否含有sessionId。
如果有,则根据sessionId检索出session并处理;如果没有,则创建一个session,并绑定一个不重复的sessionId。
适用场景:保持登陆状态,登陆以后可以在限制时间内访问需要登陆才可以访问的页面。
2.拦截器、过滤器、监听器各有什么作用?
遇到的问题:
1.Session还是没理解透,有点抽象。
2.今天看了一位师兄的日报,发现自己的代码写的很乱,重复代码很多。
明天的计划:
1.学习拦截器,过滤器,监听器。
2.找优秀的代码学习好的编码格式。
3.整理登陆注册模块的代码。
任务5开始时间:2018.1.20
预计完成时间:2018.1.23
禅道:http://task.ptteng.com/zentao/project-task.html
评论