C#實現字符串,文件獲取Md5加密校驗方法

Md5是一種散列算法,理論上是不可解密的,而且重複的幾率極小極小,因此在平常的密碼存儲上應用比較廣泛,這個值一般情況下是唯一的,所以在文件校驗上也應用的比較多,下面說明一下C#中字符串以及文件獲取Md5值方法。

1.首先是字符串獲取Md5值,封裝一個方法如下:

public static string GetMD5HashFromString(string str)

{

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

byte[] bytValue, bytHash;

bytValue = System.Text.Encoding.UTF8.GetBytes(str);

bytHash = md5.ComputeHash(bytValue);

md5.Clear();

string sTemp = "";

for (int i = 0; i < bytHash.Length; i++)

{

sTemp += bytHash[i].ToString("X").PadLeft(2, '0');

}

return sTemp.ToUpper();

}

可以看到傳進來的參數是一個字符串,而返回的值就是一個大寫的字符串,獲取這個字符串就是經過Md5加密之後的。調用的時候直接用此方法即可:GetMD5HashFromString("要加密的字符串");

2.下面是文件獲取Md5值,依舊封裝一個方法:

public static string GetMD5HashFromFile(string filePath)

{

try

{

FileStream file = new FileStream(filePath, FileMode.Open);

System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();

byte[] retVal = md5.ComputeHash(file);

file.Close();

StringBuilder sb = new StringBuilder();

for (int i = 0; i < retVal.Length; i++)

{

sb.Append(retVal[i].ToString("x2"));

}

return sb.ToString().ToUpper();

}

catch (Exception ex)

{

throw new Exception("GetMD5HashFromFile() fail,error:" + ex.Message);

}

}

可以看出這個傳入的參數是一個文件路徑,返回的同樣是一個大寫字符串,也是經過加密之後的,調用方法GetMD5HashFromFile("文件目錄地址");由於是文件,可能會出現異常,所以加了一個try catch。

網上所說的Md5解密並不是真正的解密,因為Md5本就是一種不可解密的算法,其所稱解密只是把一些常用的字符串獲取Md5值,然後存入資料庫,若是你輸入Md5值在資料庫里存在,那麼就會返回與之對應的字符串了,若是沒有就自然無法獲取了,所以說密碼還是要起的複雜些,加入一些特殊字符更好些。

本文內容整理自網絡, 文中所有觀點看法不代表淘大白的立場