MD5是一種加密算法,這種算法的用途我在另外一篇文章里寫過,簡(jiǎn)單來(lái)說MD5就是把輸入的字符或者文件,不論長(zhǎng)短或者大小都轉(zhuǎn)化為唯一的32位字符串,這套字符串可以用作“身份證明”或者“加密工具”,下面筆者為大家演示一下如何用MD5對(duì)字符進(jìn)行加密。

首先筆者演示一種最簡(jiǎn)單的方法,那就是在搜索引擎上隨便找一個(gè)MD5加密網(wǎng)站,找到之后點(diǎn)進(jìn)去,先看一下字符“e”的MD5值,網(wǎng)站顯示為e1671797c52e15f763380b45e841ec32,然后再看一下字符“f”的MD5值,網(wǎng)站顯示為8fa14cdd754f91cc6554c9e71929cce7,不同的字符串可以輸出不同的MD5值,這種方式可以讓我們?yōu)楸容^短的字符串加密,但是今天筆者主要要講的不是這種方式,而是用電腦自帶的軟件生成MD5值。


打開電腦的powershell,之所以用powershell是因?yàn)檫@個(gè)軟件是系統(tǒng)的自帶的,同時(shí)功能還很強(qiáng)大,它兼容了.net函數(shù)庫(kù),只要是其他語(yǔ)言可以做到的事情(比如JAVA、Python),它都能做到,powershell就是萬(wàn)能的。在powershell中輸入:
$utf8 = new-object -TypeName System.Text.UTF8Encoding $hasher = [System.Security.Cryptography.MD5]::create() -join($hasher.ComputeHash($utf8.GetBytes("h"))|ForEach-Object {$_.ToString("x2")}) 輸出的結(jié)果就是字母h的MD5值為2510c39011c5be704182423e3a695e91

我們可以和網(wǎng)站上對(duì)比一下,看下這個(gè)結(jié)果對(duì)不對(duì),結(jié)果完全一致,下面筆者為大家解釋一下這些代碼是什么意思。

$utf8 = new-object -TypeName System.Text.UTF8Encoding
這段代碼的意思是新建一個(gè).net對(duì)象實(shí)例,它可以將我們輸入的字符轉(zhuǎn)化為Unicode編碼,Unicode編碼又稱為萬(wàn)國(guó)碼,這個(gè)編碼全世界都通用,作用就是將我們輸入的字符轉(zhuǎn)化為計(jì)算機(jī)能夠識(shí)別的形式,h的Unicode編碼是104

$hasher = [System.Security.Cryptography.MD5]::create()
這段代碼是引入一個(gè).net MD5對(duì)象實(shí)例,也就是MD5算法,這個(gè)算法已經(jīng)封裝好了,我們直接使用就可以。

MD5算法輸出了一個(gè)16位數(shù)組,數(shù)組是十進(jìn)制表示的,還不是我們最終想要的結(jié)果,我們最終想要的結(jié)果是16進(jìn)制的前兩位,所以我們需要將這些數(shù)字轉(zhuǎn)化為16進(jìn)制,并取前兩位。

ToString("x2") X表示16進(jìn)制,2表示前兩位。
ToString是一個(gè)轉(zhuǎn)化字符串格式的函數(shù),此時(shí)輸出的結(jié)果就是MD5值了,但是這個(gè)結(jié)果是分散的,我們?cè)儆?jion連接符將這些結(jié)果連接在一起就是我們想要的形式了。
后記:MD5這種加密算法正在逐漸被淘汰,因?yàn)閷W(xué)術(shù)界已經(jīng)證明MD5是可以被逆向解密的,很多網(wǎng)站都提供MD5的解密服務(wù),不過將它作為一種文件校驗(yàn)工具還是非常不錯(cuò)的。