1. 程式人生 > >【C#】MD5加密(Message-Digest Algorithm 5)

【C#】MD5加密(Message-Digest Algorithm 5)

引言

    MD5為電腦保安領域廣泛使用的一種雜湊函式,用於確保資訊傳輸完整一致。是計算機廣泛使用的雜湊演算法之一。將資料(如漢字)運算為另一固定長度值,是雜湊演算法的基礎原理

MD5演算法的特點

(1)壓縮性:任意長度的資料,算出的MD5值長度都是固定的

(2)容易計算:從原資料計算出MD5值很容易

(3)抗修改性:對原資料進行任何改動,哪怕只修改一個具有相同MD5值的資料(即偽造資料)是非常困難的

MD5演算法的原理

    MD5以512位分組來處理輸入的資訊,且每一分組又被劃分為16個32位子分組,經過了一系列的處理後,演算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成一個128位雜湊值

    總體流程如下圖所示,表示第i個分組,每次的運算都由前一輪的128位結果值和第i塊512bit值進行運算


MD5應用

    MD5的典型應用是對一段資訊(message)產生資訊摘要(Message-Digest),以防止被篡改。比如,在Unix下有很多軟體在下載的時候都有一個檔名相同,副檔名為.md5的檔案,在這個檔案中通常只有一行文字,大致結構如下:

    MD5 (tanajiya.tar.gz) = 38b8c2c1093dd0fec383a9d9ac940515

    這就是tanajiya.tar.gz檔案的數字簽名。MD5將整個檔案當作一個大文字資訊,通過其不可逆的字串變換演算法,產生了這個唯一的MD5資訊摘要。

    大家都知道,地球上任何人都有自己獨一無二的指紋,這常常成為司法機關鑑別罪犯身份最值得信賴的方法;與之類似,MD5就可以為任何檔案(不管其大小、格式、數量)產生一個同樣獨一無二的“數字指紋”,如果任何人對檔案做了任何改動,其MD5值也就是對應的“數字指紋”都會發生變化。

Md5Helper

   
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Security.Cryptography;

namespace CaterCommon
{
    public partial class Md5Helper
    {
        public static string EncryptString(string str)
        {
            //uft8,x2
            //建立物件的方法:構造方法,靜態方法(工廠)
            MD5 md5 = MD5.Create();
            //將字串轉換成位元組陣列
            byte[] byteOld=Encoding.UTF8.GetBytes(str);
            //呼叫加密方法
            byte[] byteNew = md5.ComputeHash(byteOld);
            //將加密結果進行轉換字串
            StringBuilder sb = new StringBuilder();
            foreach(byte b in byteNew)
            {
                //將位元組轉換成16進製表示的字串,而且是恆佔用兩位從頭再來
                sb.Append(b.ToString("x2"));
            }
            //返回加密的字串
            return sb.ToString();
        }
    }
}

小結

    對於MD5加密,還僅限於初步的瞭解和認識。在後期學習中會深入學習一下。

    如有不同見解,歡迎指正

         本文所有程式碼均已通過作者測試

         本文所有內容均為作者原創,如有轉載,請註明出處