今天来跟大家聊聊我最近捣鼓的一个小玩意——MD5算法。这个东西听起来挺神秘的,搞起来还挺有意思的。一开始我也摸不着头脑,就各种搜索学习资料,后面还真的被我实践出来。得说...
今天来跟大家聊聊我最近捣鼓的一个小玩意——MD5算法。这个东西听起来挺神秘的,搞起来还挺有意思的。一开始我也摸不着头脑,就各种搜索学习资料,后面还真的被我实践出来。
得说下我这回的目标是简单说,我就是想把一段文字,不管长短,都通过MD5这个算法,变成一串固定长度的乱七八糟的字符。这串字符,就叫做“哈希值”,有点像一个独特的“指纹”,原来的文字变一点,这个指纹就会完全不一样。
我以为直接用现成的工具就行,毕竟网上这类工具也很多。搜到很多在线工具,我随便找个试试,把我的文字输进去,点一下按钮,“唰”的一下,哈希值就出来。确实挺方便,但总觉得少点对于我这种喜欢自己动手的人来说,还是想自己搞定它。
于是我开始自己动手。第一步是啥?当然是要找资料学习。我先是搜一堆相关的文章和资料,大致上解一下MD5是怎么工作的。发现它就是把输入的文字,先分成一些固定大小的小块,然后对每一块进行很多次的数学运算,再把结果组合起来,就得到那串“指纹”。
我开始按照网上的教程一步步来。先是对我的文字进行“填充”。啥意思?就是让我的文字的长度变成512的倍数还差一点点。具体来说,就是差64个比特(8个字节)。咋填充?就是在文字后面先加一个“1”,然后不停地加“0”,直到满足条件为止。这一步是为让后面的计算更方便。
然后就是最关键的部分——进行主要的循环计算。这个循环的次数,就是你前面把文字分成多少块。对每一块,都要进行很多轮的运算,每一轮都有一些固定的步骤,用一堆数学公式,这里就不细说,反正挺复杂的。我当时也是照着别人的代码,一步步尝试,还好搞定。
经过所有这些运算后,我就得到四个32位长度的小块。把它们拼在一起,就得到最终的MD5哈希值。我试着把我最开始用在线工具算出来的哈希值,和我自己算出来的对比一下,一模一样!那一刻心里还是挺有成就感的。
这整个过程,虽然说起来简单,但实际操作起来还是遇到不少坑。比如说,填充那一步,一开始我就没弄明白,导致后面的计算一直出错。还有就是那些复杂的数学运算,也花我不少时间去理解和调试。不过搞定之后,还是觉得挺值的。至少以后再看到MD5,我就不会觉得它是个黑盒子。
这回的实践经历让我学到很多东西,不仅是对MD5算法的解,还有就是,有些东西,真的要自己动手去做,才能真正理解。好,今天的分享就到这里,希望大家喜欢。