1. 程式人生 > >C#實現字串,檔案獲取Md5加密校驗方法

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值在資料庫裡存在,那麼就會返回與之對應的字串了,若是沒有就自然無法獲取了,所以說密碼還是要起的複雜些,加入一些特殊字元更好些。