C#實現字串,檔案獲取Md5加密校驗方法
http://jingyan.baidu.com/article/db55b6099758134ba30a2f1a.html
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值在資料庫裡存在,那麼就會返回與之對應的字串了,若是沒有就自然無法獲取了,所以說密碼還是要起的複雜些,加入一些特殊字元更好些。