Hash(哈希)算法科普

单向散列函数算法也称Hash(哈希)算法,是一种将任意长度的消息压缩到某一固定长度(消息摘要)的函数(该过程不可逆)。Hash函数可用于数字签名、消息的完整性检测、消息起源的认证检测等。常见的散列算法有MD5、SHA、RIPE-MD、HAVAL、N-Hash等。

 

在这以MD5介绍一下Hash函数。MD5消息摘要算法(Message Digest Algorithm)是由R.Rivest所设计的。它对输入的任意长度的消息进行运算,产生一个128位的消息摘要。近几年来,随着穷举攻击和密码分析的发展,应用最为广泛的MD5算法已经不再那么流行了。

MD5将任意长度的字符串变换成一个128位的大整数,并且是不可逆的。换句话说,即便MD5算法的源代码满天飞,使得任何人都可以了解MD5的详尽算法描述,但是绝对没有任何人可以将一个经由MD5算法加密过的字符串还原回原始的字符串。

例如字符串:ce.kanxue.com,用MD5计算器计算一下得到的MD5值是:

A645153DFD40CE085E4A8948E589AE59

 

利用这个方法,可以对文章或文件进行签名校验,文章或文章若有字符被改动,得到的MD5值就变化了。

 

MD5计算器这里下载:http://tools.pediy.com/windows/cryptography.htm

Hash(哈希)算法科普 - a103368520 - 星空.之上(Sendige)

一些web网站,喜欢用MD5来保存密码,比如一个用户的密码是:12345678,网站把用户密码12345678的密码MD5值“ 25D55AD283AA400AF464C76D713C07AD”保存到数据库里。

这样即使黑客入侵拿到数据,也不能得到密码的明文。但这里会有个问题,黑客会建立一个彩虹表,以保存常用单词或字串的MD5值,需要的时候,通过MD5的值反查,就要吧得到明文“12345678”。

例这个网站:http://www.cmd5.com/

输入MD5值““ 25D55AD283AA400AF464C76D713C07AD””,就可以得到明文:

Hash(哈希)算法科普 - a103368520 - 星空.之上(Sendige)
 

小知识:彩虹表是一个用于加密散列函数逆运算的预先计算好的表, 常用于破解加密过的密码散列。

因此,网站开发中很忌讳直接用MD5保存密码的,建议用多轮MD5或其他Hash函数和随机数来生成散列值保存。

 

需要引起重视的是,随着密码分析技术的发展,现有的散列算法都是不安全的。如SHA-160、MD5、RIPEMD、HAVAL、Tiger在某些条件下能够构造出碰撞。软件保护人员在使用散列算法进行签名校验保护时,建议选择SHA-256/384/512,或者使用Whirlpool。

----------------------------------------------------------------------转自看雪论坛

posted @ 2018-09-06 21:10  Sendige  阅读(957)  评论(0编辑  收藏  举报