发表于: 2021-08-28 23:25:42

2 747


一,今天完成的事情

任务五

1.使用DES对用户ID和登录时间加密,生成Token,放入Cookie中,拦截器里通过Cookie中判断Token的有效性来判断用户是否登录。

2.修改Task4中的两个页面,一个设为用户不登录可以访问,一个设为用户必须登录才可以访问。要求用户必须登录才能访问的url统一增加前缀 /u/。

3.登录要使用MD5加盐

4.登录退出账号


1,按照要求,参考gif文件,建立user表,不带前缀rest。密码存储的是密文。用salt加密的,需要存储salt进行验证。目前不加入联系方式。只保证验证用途。token的算法中包含时间。每次登录更新时间,既保证了每次生成token能不同因为时间不同,业务在数据库存储的是没退出登录就能无状态验证。而且token要求“用DES对用户ID和登录时间加密”。


2,从数据库自动生成entity, dao, service, controller.


3,md5我觉得需要理解的东西:md5算法原理浏览。登录要使用MD5加盐:所以在注册的时候,是生成盐,既然是登录就是和password混合,然后才做md5的转换。数据库存储的一定是已经“先salt后md5”处理过的密文。注册后登录,是把客户的密码“先salt后md5”生成密文,再对比和数据库是否一致。数据库不能存明文密码。


md5用java写出来不简单,消息摘要算法可以不同,使用频率已经是工具类。生成盐的算法也参考过往算法。利用已经存在的salt代码,和密码拼接,利用选用的md5代码生成拼接密文。


md5的思路是:

MD5计算,对原始消息(Message)做有损的压缩计算,无论消息(输入值)的长度字节是多少,是1亿字节、1个字节、还是0个字节,都会生成一个固定长度(128位/16字节)的消息摘要(输出值)。 


不可逆


恒定性:如果计算出的消息摘要多次不一样,那肯定是使用一个假的MD5工具。因为无法满足,当原始消息恒定时,每次运行MD5产生的消息摘要都是恒定不变的,无论是你、我、他来计算,结果都应该是一摸一样的。


MD5应该加盐。

无盐的MD5 

大型网站需要保存千万万用户的密码,如果明文保存,万一哪天被数据库被攻破了,用户密码全泄密了。 如果数据库只保存用户密码的MD5消息摘要,那么即使黑客拿到了用户们的MD5消息摘要,也无法复原出用户的密码。 有同学会抗议,这个说法不对!黑客使用彩虹表可以将用户密码复原出,网站常用的密码一般也就6-10位,这个取值空间还是很好破解的。

没错,但是可以加盐啊,提高破解的难度。 


加盐的MD5 

密码 + (盐)做为输入参数(原始消息),那么市面上的彩虹表一律作废,因为它们都没有加盐。虽然还是挡不住破解者花时间计算,但是要耗费破解者一定资源。


总结:

MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式 (也就是把一个任意长度的字节串变换成一定长的十六进制数字串)。

特点:

压缩性: 任意长度的数据,算出的MD5值长度都是固定的。

容易计算: 从原数据计算出MD5值很容易。

抗修改性: 对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。

强抗碰撞: 已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。


4,token。token一般和session cookie对比,任务5的token是放入cookie中的。

要求“使用DES对用户ID和登录时间加密,生成Token”,之前已经介绍过DES的思想,DES也是用别人写的java工具类。static。user中有id,也记录了每次登录时间。

token还涉及Base64编码。这个是编码,让人眼不能一下子看出来,但是不是加密。能够保证token传输。


<!-- JJWT -->
<dependency>
 <groupId>io.jsonwebtoken</groupId>
 <artifactId>jjwt</artifactId>
 <version>0.9.1</version>
</dependency>


5,我先在进一步处理token前做一些拦截器配置。

spring-mvc.xml中可以配置拦截器。“要求用户必须登录才能访问的url统一增加前缀 /u/。”,所以这里配置的是

<mvc:mapping path="/u/**"/>

上面屏蔽/u/网址开头访问的动态资源。排除下面这些,也就是不拦截请求静态资源。

<!-- 配置拦截器 -->
<mvc:interceptors>
   <!-- 多个拦截器,按顺序执行 -->
   <mvc:interceptor>
       <!--<mvc:mapping path="/**"/> 拦截所有的url包括子url路径 -->
       <mvc:mapping path="/u/**"/><!-- 拦截/u/开头的所有url -->
       <mvc:exclude-mapping path="/css/**"/>
       <mvc:exclude-mapping path="/js/**"/>
       <mvc:exclude-mapping path="/images/**"/>
       <bean class="com.nicole.tileslogin.util.InterceptUtil"/>
   </mvc:interceptor>
</mvc:interceptors>


二,今天问题

继续拦截器。继续token生成。继续放入cookie。


三,今天的收获

说明md5,展示User思路。加盐是加密算法常用的增加破解难度的方式。密码还是一贯只存密文。对比用户输入后加密。


四,明天的计划

任务5




返回列表 返回列表
评论

    分享到