文档章节

2.请求安全-- MD5的必要性以及实际应用场景

文振熙
 文振熙
发布于 2015/08/21 11:19
字数 1512
阅读 597
收藏 3

「深度学习福利」大神带你进阶工程师,立即查看>>>

#MD5的必要性以及实际应用场景 ##前言 MD5为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。

PS:写这篇文章的本意是把我在工作中使用的MD5加密技巧分享出来,和大家一起交流,可能应为水平有限会有遗漏之处望大家包含,也请大家提出建议我会进一步完善. ##1.MD5算法具有以下特点:## 1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。 2、容易计算:从原数据计算出MD5值很容易。 3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。 4、弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。 5、强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。 根据以上的特定我们能总结出几个根据以上特点衍生出来可以供我们使用的特性:

1.方便存储:MD5加密出来都是32位的字符串,能够给定固定大小的空间存储,传输,验证
2.文件加密:MD5运用在文件加密上很有优势,应为只需要32为字符串就能对一个巨大的文件进行验证完整性
3.不 可 逆:MD5加密出来只会截取末尾32位,具有良好的安全性,如果是对于参数加密很难伪造MD5
4.加密损耗低:MD5加密对于性能的消耗微乎其微(我获得的结果是:0.001毫秒)

##2.实际上需要如何应用呢## 我在实践中常常会用到的MD5校验加密一般运用场景:用户密码,请求参数,文件校验 ###2.1.用户密码### 对于用户密码加密最高境界就是:别人获得你数据库的用户资料别人也没有办法获知密码.要达到就要有一套复杂的加密规则,一般常用的规则比如:

MD5(MD5(用户名+用户密码)+MD5(KEY+项目名+公司名)) 这样可以避免和别人碰库不排除别人用MD5来攻击你的服务器来匹配.

当然还可以自定很多种加密方法,就算知道加密方法也几乎无法去推送出用户原密码是什么 ###2.2.请求参数校验### 都与服务器来言排除系统问题最大的问题就是害怕请求被拦截,拦截修改之后就有很多漏洞的可能性了

为了避免被拦截,参数被修改这种文件的常用方法就是对请求参数进行校验,就算拦截了请求参数修改了只要模拟不出MD5加密出来的值,在服务器过滤器直接就会进行拦截.

我这边推荐的请求校验方法在传递参数的时候带上 MD5值 随机数 时间戳 当然这几个都是由客户端生成 MD5=MD5(随机数+时间戳+MD5(KEY+公司名+项目名)) 当然这个规则也是可以定制的

请求参数在服务器拦截器就用客户端传递过来的 随机数 时间戳 来做校验如果不通过就不让继续访问(在这里的随机数 时间戳在后面的请求安全请求唯一性验证中会起到很大的作用所以建议保留) ###2.3文件校验### 当然对于一些图片已经一些很小很小的文件来说可以不用MD5校验应为基本上都是一次请求就完成了上传,而且显示的时候也不需要验证图片完不整.

但是如果是遇到了大文件上传MD5 就起到作用了,当然不是吧一个几个G 的文件一次性上传使用MD5校验,这边100%会失败 就算传递到服务端了 这个时间是不能被接受的 ,而且服务器最好是对请求做好限制(以后会开一篇来单独探讨文件上传的问题)

我们对于大文件上传的处理方式是进行分片上传,也就是所谓的断点续传,里面的实现机制

如果有一个5MB的文件 客户端把它分割成5份 1MB的文件 在上传的时候 上传两个MD5值 一个是当前上传的片1MB文件流的MD5 还有一个就是拼接之后的MD5(如果现在上传的是第二片 这个MD5就应该是第一片加上第二片的MD5)通过这样的方式能保证文件的完整性

当如果文件传到一半断了,用户换了台机器传 通过验证文件MD5 值就可以得知用户已经传到了第几片 就可以告诉用户从第几片开始传递 就解决了这个问题 ##3.总结:## 在不知不觉中MD5校验早已经运用到我们生活中的点点滴滴,无时无刻不在使用者MD5.通过以上的例子说明了MD5在我们服务器开发安全中扮演着不可替代的角色,在日常的开发中使用MD5校验技术可以有效的避免莫些安全性的问题.

文振熙

文振熙

粉丝 351
博文 173
码字总数 227035
作品 5
杨浦
技术主管
私信 提问
加载中
请先登录后再评论。
访问安全控制解决方案

本文是《轻量级 Java Web 框架架构设计》的系列博文。 今天想和大家简单的分享一下,在 Smart 中是如何做到访问安全控制的。也就是说,当没有登录或 Session 过期时所做的操作,会自动退回到...

黄勇
2013/11/03
3.5K
8
SQLServer实现split分割字符串到列

网上已有人实现sqlserver的split函数可将字符串分割成行,但是我们习惯了split返回数组或者列表,因此这里对其做一些改动,最终实现也许不尽如意,但是也能解决一些问题。 先贴上某大牛写的s...

cwalet
2014/05/21
9.7K
0
Swift百万线程攻破单例(Singleton)模式

一、不安全的单例实现 在上一篇文章我们给出了单例的设计模式,直接给出了线程安全的实现方法。单例的实现有多种方法,如下面: class SwiftSingleton { } 这段代码的实现,在shared中进行条...

一叶博客
2014/06/20
3.5K
16
beego API开发以及自动化文档

beego API开发以及自动化文档 beego1.3版本已经在上个星期发布了,但是还是有很多人不了解如何来进行开发,也是在一步一步的测试中开发,期间QQ群里面很多人都问我如何开发,我的业余时间实在...

astaxie
2014/06/25
2.7W
22
漏洞检测工具--Peach Fuzzer

Peach是一种用Python编写的 Fuzzer。这种工具有助于发现并公开许多漏洞,并认为是黑客和安全团体中最流行的工具之一。为了利用Peach框架,必须创建Phthon脚本,脚本 中包含了在服务器上执行的...

匿名
2013/02/06
8.8K
1

没有更多内容

加载失败,请刷新页面

加载更多

Hacker News 简讯 2020-08-12

最后更新时间: 2020-08-12 00:01 Single Page Applications using Rust - (sheshbabu.com) 使用Rust的单页应用程序 得分:126 | 评论:68 The case for why Google should be regulated as a ......

FalconChen
25分钟前
56
0
在关系数据库中存储分层数据有哪些选择? [关闭]

问题: Good Overviews 良好的概述 Generally speaking, you're making a decision between fast read times (for example, nested set) or fast write times (adjacency list). 一般来说,您......

fyin1314
昨天
7
0
创建myBatis项目

1、简介 1.1、核心组件 SqlSessionFactoryBuilder(构造器):根据配置信息或者代码生成SqlSessionFactory SqlSessionFactory(工厂接口):依靠工厂来生成SqlSession(会话) SqlSession(会话): ...

执键走天涯
昨天
5
0
Tomcat集群带来的问题和解决思路

Tomcat集群 存在问题 解决方案 基于Redis+Cookie+Jackson+Filter的原生解决集群Session共享问题 使用Spring Session零侵入解决Session共享 单点登录实现 Redis构建Session服务器 使用Redis+C...

code-ortaerc
昨天
17
0
小福利

点击有福利 本文分享自微信公众号 - V5codings(gh_c1ec2d16ec93)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。...

V5codings
2019/11/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部