众所周不知,小堡鸽自寒假以来,每天沉迷游戏,荒淫无度,但还把自己伪装成爱学习的样子,可谓无耻无能。
每每午夜夜深人静之时,小堡鸽总喜欢从冰箱里打开一杯82年的青柠绿茶,抿一小口,打开尘封已久的电脑准备敲代码。
Ten seconds later…
今天的学习到此为止,现在是,游戏时间!
终于到了查进度的这一天,学长看着Little Burger的Liitle项目陷入了沉思…
为了不让这一天成为现实,Little Burger决定…
把他的项目藏起来!
就像每一个没写完寒假作业的烧年,回到学校面对班主任犀利的眼神,毅然决然回答道”我找不到了“一样。经过Little Burger的Little脑袋的缜密思考,觉得这种方式一定能瞒天过海。
为了帮助Little Burger成功瞒住他的学长,小堡鸽的好朋友Little Ham从口袋里掏出了他刚从百度上搜索出来的MD5算法!
“锵锵~”小汉伸出手,手心里躺着热乎乎的MD5算法。
一、关于MD5算法——消息摘要算法
小汉:请看VCR(摊手)
如图,第一种加密算法只使用一种密钥,加密和解密共用同一个,故而是对称的加密算法,第二种算法则使用两种密钥,往往公开公钥而保留私钥,所以这种算法称为非对称加密算法。
而今天要学的MD5算法,它就是:消息摘要算法!
Little Burger:?
Little Ham:既然要追求刺激,那就贯彻到底咯。
介绍消息摘要算法,就不得不先提到MD5加密的几个特性:
1.长度固定:无论输入多少字节,输出总是16字节
2.不可逆:无法从密文反推到原文(因为无论多大的信息都被压缩到16字节,所以必然会丢失一部分信息)
3.高度离散性:即输出没有任何规律,即便只改变原文的一个字节,输出也会天差地别。
4.抗碰撞性:即想找到两个不同的数据,加密成一样的MD5密文十分困难。
故而可以这样理解消息摘要算法:将一段数据进行提取加密,因为其高度离散性和抗碰撞性,常常称呼这段加密后的密文为“数字指纹”,借由数字指纹,我们可以实现数据签名、数据完整性校验等等功能。
以寻常的密码保护作为例子,在记录密码时,不记录密码本身,而是使用MD5算法加密成密文,若是第二次输入密码,计算后密文一致,则验证通过。又因为其不可逆性质,即便密码的数据库被盗,也无法通过MD5反推出明文是什么。
又或者是文件的完整性校验。可以在文件发出前将其用MD5算法进行加密,在接收时再次加密,观察密文,则可以校验出该文件在发送过程中是否经过篡改或者损坏。
二、MD5算法是如何实现的?
这个部分,我将先用文字描述一遍MD5算法的实现过程,再放上部分关键代码和数据,分隔开用于理解和用于实践的部分。&#x