发表于: 2017-11-03 22:55:01

1 790


今天完成的事情

1.解决DES加密token后的乱码问题

创建数据库,用于存储用户信息,当用户登陆时,在控制器中获取用户的用户名,通过用户名找到用户id,然后获取登陆时的时间戳,将用户id和时间戳组合在一起,中间加上 “ . ” 号用来分隔,得到一个字符串,用DES将字符串加密,得到的密文是一个字节数组,将字节数组转换为String字符串之后,再用DES进行解密会出现数据不足8位的报错:

而且将字节数组转换为字符串后,会显示为乱码:

要将其放入Cookie中的话,还是得转化为字符串,

尝试对加密后得到的字节数组解密,可以成功:

应该是转换为字符串的时候添加了某些不可见的字节

尝试用Base64对密文再进行一次编码,得到:

最后的 == 是编码方法用来填充空余位置,

将经过base64编码过的密文放入Cookie中,需要进行解密时,可以取出此字符串,用base64先解码一次,得到字节数组,用DES来解码字节数组,就可以得到原文。

加密过程:

       User user =userService.get(name);
       int user_id=user.getUser_id();
       String user_id_s=String.valueOf(user_id);
       long login_at=System.currentTimeMillis();
       String login_at_s=String.valueOf(login_at);
       String token2=user_id_s+"."+login_at_s;
       byte[] aaa= DESEncryptTools.encrypt(token2.getBytes(),key.getBytes());
       String tok=new String(aaa);
       String tok1 = Base64.getEncoder().encodeToString(aaa);

经过Base64编码之后可以直接得到字符串。

解密过程:

byte[] tok2 = Base64.getDecoder().decode(tok1);
byte[] bbb= DESEncryptTools.decrypt(tok2,key.getBytes());
String s = new String(bbb);

先用base64解码,可以直接得到一个字节数组,将数组传入decrypt方法中,用DES进行解密,再次得到一个字节数组,最后将字节数组转换为字符串,即可与原来的数据进行比对,用来验证登陆信息。


2.写了一个注册页面,实现向数据库中添加新用户

首先建立一个用户表users

然后写了pojo,mapper,service等,

在jsp中写一个表单:

<!DOCTYPE html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<form action="logon" method="post">
   账号:<input type="text" name="user_name"><br>
   密码:<input type="password" name="user_password"><br>
   <input type="submit" value="注册">
</form>

请求提交后,在控制器中进行逻辑判断:

@RequestMapping("logon")
public String logon(User user, HttpServletRequest request, HttpServletResponse response){

String name = request.getParameter("user_name");
   String password = request.getParameter("user_password");
   if (null != userService.get(name)){
       return "logon_fail";}
   else{
     user.setUser_name(name);
     user.setUser_password(password);
     userService.add(user);
     return "redirect:/home";}

}

对用户名进行判断,如果从页面取得的用户名在数据库中已经存在,则跳转到失败页面,如果没有,则将获取的用户名和密码存入数据库中,并跳转到首页。


明天的计划

完成步骤一


遇到的问题

如上


收获

了解了token的生成及加密解密


返回列表 返回列表
评论

    分享到