发表于: 2017-11-10 23:55:58

2 803


今天做的事情:


                 了解MD5加密和DES加密。

                

   MD5

         MD5加密算法的全称是Message-Digest Algorithm 5,MD5将任意长度的“字符串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换会原始的字符串。常用的是在网站注册的时候将密码加密后存储到数据库中,然后在登录的时候将加密的密码和数据库中的加密密码进行比对,如果正确则登录系统,在一定程度上保证了用户信息安全。


                

                             在这里返回StrConverUtil.byteArrToHexStr(md),借助了一个StrConverUtil这个工具类,只会输出32位的加密字符, 我看到有一位师兄 return md.String();,这样的情况我测试过了,无论在下面的测试里,输入什么。结果为:MD5加密后的字符:[B@39ba5a14,长度:11 。



                     Test测试。

                    

public static void main(String[] args) {
try {
DES des = new DES("Java");// 自定义密钥
       String src = "你说啥是啥";
String src1 = des.encrypt(src); //encrypt  加密,将…译成密码
       String src2 = des.decrypt(src1); //decrypt  解密,解释明白
       String src3 = MD5.getMd5(src1);
System.out.println("DES加密前的字符:" + src + ",长度:" + src.length());
System.out.println("DES加密后的字符:" + src1 + ",长度:" + src1.length());
System.out.println("DES解密后的字符:" + src2 + ",长度:" + src2.length());
System.out.println("MD5加密后的字符:" + src3 + ",长度:" + src3.length());
} catch (Exception e) {
e.printStackTrace();
}
}

                

                  结果:

            

              


   DES

         DES全称为Data Encryption Standard,即为数据加密标准,是一种使用密钥加密的块算法。DES算法的入口参数有三个:Key、Data、Mode。其中Key为7个字节共56位,是DES算法的工作秘钥;Data为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。

                

           

String src1 = des.encrypt(src);   //encrypt  加密,将…译成密码
String src2 = des.decrypt(src1); //decrypt  解密,解释明白

 

                在这里就不贴代码了,很长,还有就是看得蒙。只能先会拿来用,人力亦有穷时。



               了解Token, 现在使用token验证的就有,Facebook,Twitter,Google,GitHub等。

               我们都知道http请求协议是无状态的,意味着每一次要需要验证请求,从而辨别客户身份,在使用token之前,都是通过服务端存储的登陆信息来辨别请求,一般都是通过session来完成,随着web,移动端兴起,这种在可扩展性方面有一些缺陷。

               使用session的时候,每次有请求需要验证,服务端都需要创建一个记录来存储信息,当越来越多的情求时,内存的开销越来越大。

             

基于Token的验证原理

基于Token的身份验证是无状态的,我们不将用户信息存在服务器或Session中。

这种概念解决了在服务端存储信息时的许多问题

  NoSession意味着你的程序可以根据需要去增减机器,而不用去担心用户是否登录。

基于Token的身份验证的过程如下:

1.用户通过用户名和密码发送请求。

2.程序验证。

3.程序返回一个签名的token 给客户端。

4.客户端储存token,并且每次用于每次发送请求。

5.服务端验证token并返回数据。

     每一次请求都需要token。token应该在HTTP的头部发送从而保证了Http请求无状态。我们同样通过设置服务器属性Access-Control-Allow-Origin:* ,让服务器能接受到来自所有域的请求。需要主要的是,在ACAO头部标明(designating)*时,不得带有像HTTP认证,客户端SSL证书和cookies的证书。

          

               


                      注册时:

          


@RequestMapping(value = "/login",method = RequestMethod.POST)
public String login(User user ){
logger.info("user : "+user);
if(user!=null){
//生成唯一id
       UUID uuid = UUID.randomUUID();
//将生成的字符串中的 - 去掉
       String uid = uuid.toString().replace("-", "");
user.setId(uid);
long date = new Date().getTime();
//拿出 pwd 密码
       String pwd = user.getPwd();
//进行md5加密 密码
       user.setPwd(MD5.getMd5(pwd));
user.setCreate_date(date);

logger.info("加密后的 user : "+user);
serviceI.addUser(user);
}
return "redirect:list";


            日志:

        

           数据库:

                        



            再来对任务进行分析。


           流程大概就是,第一次登录,需要去注册,注册时,将密码MD5加密放进数据库,获取当前时间存进create_date字段,  注册完,再次登录时,还要将密码进行加密,和用户名一起去数据库进行比对,正确才能登录,这时候,再次获取当前的登陆时间去修改数据库中之前存的时间,到这步,需要再写方法去修改,然后将id和时间拼接,生成token,再由DES对其加密,放进cookie,设置过期时间,在页面点击指定页面时,就使用拦截器进行判断,使用DES解密之后,拿id和时间去数据库比对, 这里需要写一个方法去比较,比对后,不成功,进入登录页面,成功,就可以进入指定页面。然后再获取当前时间,再写一个修改方法根据id去更新时间,再生成token,加密,放入cookie,放进session。



         

       

遇到的问题:


               一开始对任务理解不是很好,这一天单个去先了解加密,再了解token,再来查cookie,看的很广泛,对任务还是有点蒙,晚上做个注册,加密一下密码,自己的理解的和韬哥好好聊了聊,真的是感觉很有帮助,有了思路,感觉很有干劲了,不会的也知道怎么去搜。




收获:


               对任务理解深刻,完成注册模块,加密,了解token和cookie,还有一点是以后做任务遇到问题,就有一套解决方案了。最后,还是感谢辅导师兄,多讨论,还是很有助于理解的。







返回列表 返回列表
评论

    分享到