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

#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校验技术可以有效的避免莫些安全性的问题.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏嵌入式程序猿

那些一看就懂的MQX实时操作系统进阶培训

看过了MQX嵌入式系统入门培训,你是否想进阶培训呢,今天我们就来看看那些常用的功能进阶培训 工程建立 参照上节课的内容和MQX例程源码目录结构,可以新建我们自己...

36970
来自专栏CDA数据分析师

总结:常用的 Python 爬虫技巧

用python也差不多一年多了,python应用最多的场景还是web快速开发、爬虫、自动化运维:写过简单网站、写过自动发帖脚本、写过收发邮件脚本、写过简单验证码...

23050
来自专栏xcywt

程序员需要知道的十个操作系统的概念

说明:我之前在网上看到这篇文章觉得非常好,于是把它翻译了下来。当然很多地方翻译的很渣,见笑了。温馨提示,文章有点长。

12520
来自专栏杨建荣的学习笔记

通过shell脚本添加备库日志 (r9笔记第94天)

今天下午的时候,准备顺手写一个简单的脚本,但是发现很多事情较真起来真是寸步难行。在写脚本的过程中碰到了太多的问题,很多时候感觉像要实现的功能更通用,就得做更多的...

39060
来自专栏拂晓风起

kcfinder4j:java版的ckfinder、kcfinder (ajax在线文件管理,ckfinder jsp/java版, jquery 在线文件管理)

18530
来自专栏安恒信息

安恒信息研究员发现Struts 2高危漏洞,Apache官方致谢

ApacheStruts 2是世界上最流行的Java Web服务器框架之一。不久之前,安恒信息风暴中心安全研究员在Struts 2上发现了一枚远程代码执行漏洞,...

26850
来自专栏java一日一条

常用的 Python 爬虫技巧总结

用python也差不多一年多了,python应用最多的场景还是web快速开发、爬虫、自动化运维:写过简单网站、写过自动发帖脚本、写过收发邮件脚本、写过简单验证码...

13050
来自专栏JAVA技术站

Linux命令之crontab定时任务 原

crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。

8010
来自专栏FreeBuf

APP安全分析之打车软件

最近发现某款打车软件的APK非常的火,并听说他们进行了非常严密的防护,防止用户进行二次打包。今天我们来分析一下他的安全性到底如何。 经过严密的分析发现:该打车A...

22990
来自专栏运维杂家技术分享

使用Flex Gateway VPN将数据迁移到腾讯云

809170

扫码关注云+社区

领取腾讯云代金券