MD5是一种加密算法,这种算法的用途我在另外一篇文章里写过,简单来说MD5就是把输入的字符或者文件,不论长短或者大小都转化为唯一的32位字符串,这套字符串可以用作“身份证明”或者“加密工具”,下面笔者为大家演示一下如何用MD5对字符进行加密。
![8d1636b0083189ba68f591b8989926dd.png](https://i-blog.csdnimg.cn/blog_migrate/90d8ee20a6691efd6b976d0e805f7d3f.jpeg)
首先笔者演示一种最简单的方法,那就是在搜索引擎上随便找一个MD5加密网站,找到之后点进去,先看一下字符“e”的MD5值,网站显示为e1671797c52e15f763380b45e841ec32,然后再看一下字符“f”的MD5值,网站显示为8fa14cdd754f91cc6554c9e71929cce7,不同的字符串可以输出不同的MD5值,这种方式可以让我们为比较短的字符串加密,但是今天笔者主要要讲的不是这种方式,而是用电脑自带的软件生成MD5值。
![d91027bcfcb5c67437fde7dda1cb498d.png](https://i-blog.csdnimg.cn/blog_migrate/6fe8aed0485d9996e07b8e46f3e0bd43.jpeg)
![4b89f1f551cecf6084e08f0d5d58195d.png](https://i-blog.csdnimg.cn/blog_migrate/28973d4f7fa354c8651e5a34225c95c9.jpeg)
打开电脑的powershell,之所以用powershell是因为这个软件是系统的自带的,同时功能还很强大,它兼容了.net函数库,只要是其他语言可以做到的事情(比如java、python),它都能做到,powershell就是万能的。在powershell中输入:
$utf8 = new-object -TypeName System.Text.UTF8Encoding$hasher = [System.Security.Cryptography.MD5]::create()-join($hasher.ComputeHash($utf8.GetBytes("h"))|ForEach-Object {$_.ToString("x2")}) 输出的结果就是字母h的MD5值为2510c39011c5be704182423e3a695e91
![b686d42dbaeacccf82eda363d43fa7ba.png](https://i-blog.csdnimg.cn/blog_migrate/68e4df11e1733d1d8844c654802a225d.jpeg)
我们可以和网站上对比一下,看下这个结果对不对,结果完全一致,下面笔者为大家解释一下这些代码是什么意思。
![dffb2f0ba26b4f97a1eb33fad3e7f844.png](https://i-blog.csdnimg.cn/blog_migrate/bde88b57fc30b08a1d6489198cbf44cd.jpeg)
$utf8 = new-object -TypeName System.Text.UTF8Encoding
这段代码的意思是新建一个.net对象实例,它可以将我们输入的字符转化为Unicode编码,Unicode编码又称为万国码,这个编码全世界都通用,作用就是将我们输入的字符转化为计算机能够识别的形式,h的Unicode编码是104
![5a7ef492e06e81ccbf715788babb413c.png](https://i-blog.csdnimg.cn/blog_migrate/2a833ed5cfde9965edc33cc01dbc5030.jpeg)
$hasher = [System.Security.Cryptography.MD5]::create()
这段代码是引入一个.net MD5对象实例,也就是MD5算法,这个算法已经封装好了,我们直接使用就可以。
![3323fc11c396da6478cf8f81aed429c0.png](https://i-blog.csdnimg.cn/blog_migrate/1c50b785e5b64e346fa1706d7f55edcc.jpeg)
MD5算法输出了一个16位数组,数组是十进制表示的,还不是我们最终想要的结果,我们最终想要的结果是16进制的前两位,所以我们需要将这些数字转化为16进制,并取前两位。
![5287da19685fdfe40a2630585dea5719.png](https://i-blog.csdnimg.cn/blog_migrate/d7d466b929cf038a838e7b9f14bafa2f.jpeg)
ToString("x2") X表示16进制,2表示前两位。
ToString是一个转化字符串格式的函数,此时输出的结果就是MD5值了,但是这个结果是分散的,我们再用-jion连接符将这些结果连接在一起就是我们想要的形式了。
后记:MD5这种加密算法正在逐渐被淘汰,因为学术界已经证明MD5是可以被逆向解密的,很多网站都提供MD5的解密服务,不过将它作为一种文件校验工具还是非常不错的。