介绍一下MD5加密算法


Posted in 面试题 onNovember 12, 2016
MD5算法是一种非常优秀的加密算法。
MD5加密算法特点:灵活性、不可恢复性。
介绍MD5加密算法基本情况MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2、MD3和MD4发展而来。
Message-Digest泛指字节串(Message)的Hash变换,就是把一个任意长度的字节串变换成一定长的大整数。请注意我使用了”字节串”而不是”字符串”这个词,是因为这种变换只与字节的值有关,与字符集或编码方式无关。
MD5将任意长度的”字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。
MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被”篡改”。举个例子,你将一段话写在一个叫 readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的”抵赖”,这就是所谓的数字签名应用。
MD5还广泛用于加密和解密技术上,在很多操作系统中,用户的密码是以MD5值(或类似的其它算法)的方式保存的,用户Login的时候,系统是把用户输入的密码计算成MD5值,然后再去和系统中保存的MD5值进行比较,而系统并不”知道”用户的密码是什么。
一些黑客破获这种密码的方法是一种被称为”跑字典”的方法。有两种方法得到字典,一种是日常搜集的用做密码的字符串表,另一种是用排列组合方法生成的,先用MD5程序计算出这些字典项的MD5值,然后再用目标的MD5值在这个字典中检索。
即使假设密码的最大长度为8,同时密码只能是字母和数字,共26+26+10=62个字符,排列组合出的字典的项数则是 P(62,1)+P(62,2)….+P(62,8),那也已经是一个很天文的数字了,存储这个字典就需要TB级的磁盘组,而且这种方法还有一个前提,就是能获得目标账户的密码MD5值的情况下才可以。
在很多电子商务和社区应用中,管理用户的Account是一种最常用的基本功能,尽管很多Application Server提供了这些基本组件,但很多应用开发者为了管理的更大的灵活性还是喜欢采用关系数据库来管理用户,懒惰的做法是用户的密码往往使用明文或简单的变换后直接保存在数据库中,因此这些用户的密码对软件开发者或系统管理员来说可以说毫无保密可言,本文的目的是介绍MD5的Java Bean的实现,同时给出用MD5来处理用户的Account密码的例子,这种方法使得管理员和程序设计者都无法看到用户的密码,尽管他们可以初始化它们。但重要的一点是对于用户密码设置习惯的保护。

Tags in this post...

面试题 相关文章推荐
如何打开WebSphere远程debug
Oct 10 面试题
main 函数执行以前,还会执行什么代码
Apr 17 面试题
名词解释型面试题(主要是网络)
Dec 27 面试题
C#实现对任一张表的数据进行增,删,改,查要求,运用Webservice,体现出三层架构
Jul 11 面试题
北京鼎普科技股份有限公司软件测试面试题
Apr 07 面试题
亿企通软件测试面试题
Apr 10 面试题
同步和异步有何异同,在什么情况下分别使用他们?
Dec 28 面试题
GC是什么?为什么要有GC?
Dec 08 面试题
介绍JAVA 中的Collection FrameWork(及如何写自己的数据结构)
Oct 31 面试题
正隆泰信息技术有限公司上机题
Jun 14 面试题
三个Unix的命令面试题
Apr 12 面试题
SOA面试题:如何在SOA中实现松耦合
Jul 21 面试题
介绍一下常见的木马种类
Nov 15 #面试题
局域网标准
Sep 10 #面试题
什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
Jul 26 #面试题
作为网站管理者应当如何防范XSS
Aug 16 #面试题
能否解释一下XSS cookie盗窃是什么意思
Jun 02 #面试题
什么是跨站脚本攻击
Dec 11 #面试题
金士达面试非笔试
Mar 14 #面试题
You might like
PHP中的session永不过期的解决思路及实现方法分享
2011/04/20 PHP
PHP 获取远程网页内容的代码(fopen,curl已测)
2011/06/06 PHP
php中http与https跨域共享session的解决方法
2014/12/20 PHP
PHP执行linux命令常用函数汇总
2016/02/02 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
php+mysql开发的最简单在线题库(在线做题系统)完整案例
2019/03/30 PHP
JS Timing
2007/04/21 Javascript
jQuery lazyload 的重复加载错误以及修复方法
2010/11/19 Javascript
推荐40个简单的 jQuery 导航插件和教程(下篇)
2012/09/14 Javascript
javascript object array方法使用详解
2012/12/03 Javascript
Javascript中自动切换焦点实现代码
2012/12/15 Javascript
js动态添加onload、onresize、onscroll事件(另类方法)
2012/12/26 Javascript
jquery的ajax跨域请求原理和示例
2014/05/08 Javascript
node.js中的http.response.writeHead方法使用说明
2014/12/14 Javascript
jquery左右全屏大尺寸多图滑动效果代码分享
2015/08/28 Javascript
js插件dropload上拉下滑加载数据实例解析
2016/07/27 Javascript
原生JavaScript实现AJAX、JSONP
2017/02/07 Javascript
JavaScript 防盗链的原理以及破解方法
2020/12/29 Javascript
[02:33]DOTA2英雄基础教程 司夜刺客
2013/12/04 DOTA
python自动化测试之setUp与tearDown实例
2014/09/28 Python
python保存字符串到文件的方法
2015/07/01 Python
详解python3百度指数抓取实例
2016/12/12 Python
matplotlib绘制动画代码示例
2018/01/02 Python
Python并发之多进程的方法实例代码
2018/08/15 Python
python实现随机漫步方法和原理
2019/06/10 Python
Python使用Slider组件实现调整曲线参数功能示例
2019/09/06 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
2020/04/03 Python
浅谈Html5多线程开发之WebWorkers
2018/05/02 HTML / CSS
购买英国原创艺术:Art Gallery
2018/08/25 全球购物
VICHY薇姿俄罗斯官方网上商店:法国护肤品牌,火山温泉水
2019/11/22 全球购物
专科毕业生学习生活的自我评价
2013/10/26 职场文书
物业管理专业自荐信
2014/07/01 职场文书
作文评语怎么写
2014/12/25 职场文书
病人写给医生的感谢信
2015/01/23 职场文书
2015年结对帮扶工作总结
2015/05/04 职场文书
开学季:喜迎新生,迎新标语少不了
2019/11/07 职场文书