C# 實現MD5加密

2023-10-18 18:00:24

C#MD5加密

日常程式開發中,涉及到敏感資料內容,通常會採取加密處理以保證資料安全,本篇文章講述了在C#中使用MD5方法加密資料


MD5介紹

MD5的全稱是message-digest algorithm 5,MD5演演算法屬於hash演演算法的一類,對訊息進行運算,產生一個128位元的訊息摘要(32位元數位字母),並且加密不可逆,相同資料的加密結果一定相同。

特點

  • 任意長度的資料,算出的MD5值都是固定的長度
  • 計算容易
  • 無論對原來的資料進行多細小的改動,所得到的MD5都有很大差別
  • 弱抗碰撞:已知原資料和其MD5值,想找到一個具有相同MD5值的資料是非常困難的。
  • 強抗碰撞:想找到兩個不同的資料,使它們具有相同的MD5值,是非常困難的。

MD5解密

MD5資料是不可逆的,網上的破解工具都基於巨量資料解密,將大量資料的MD5值先儲存起來,對於一些簡單的資料,是很容易匹配到的。

使用場景

  • 使用者的密碼,身份資訊,等等一些不願意展示明文的資料
  • 數位簽章
  • 檢驗雙方資料檔案是否一致,防篡改

C#中實現MD5加密

  1. C#中提供 MD5CryptoServiceProviderMD5 兩個型別提供對MD5的加密操作,其中 MD5CryptoServiceProviderMD5 的派生類。
  2. 在.NET6中 MD5CryptoServiceProvider 會提示已過時,在使用的時候,以上兩個類都可以去使用,但在.NET6及以上版本中會提示過時,因此建議使用 MD5 來操作。

C#程式碼實現

  1. MD5CryptoServiceProvider範例化,並對資料進行加密
    string Str = "要加密的字串";
    var md5 = new MD5CryptoServiceProvider();//範例化
    //將要加密的字串轉換成位元組陣列
    byte[] strbt = Encoding.UTF8.GetBytes(Str)
    //對轉換後的位元組進行MD5加密
    byte[] result = md5.ComputeHash(strbt);

  1. MD5範例化,並對資料進行加密
    string Str = "要加密的字串";
    MD5 md5 = MD5.Create();//範例化
    //將要加密的字串轉換成位元組陣列
    byte[] strbt = Encoding.UTF8.GetBytes(Str)
    //對轉換後的位元組進行MD5加密
    byte[] result = md5.ComputeHash(strbt);
  1. 上面程式碼中。兩個類的使用方法基本一致,result為加密後產生的位元組陣列,長度為16
  2. 加密後將位元組轉換為32位元數位和字母組成的字元,這裡也是有兩種方法
  • BitConverter方法,此方法返回的字串為16組,以 - 分割的,每組兩位字元,如需要去除可以使用Replace去除
  string StrResult = BitConverter.ToString(result);
  StrResult = StrResult.Replace("-", "");
  • 迴圈位元組陣列轉成字串,其中ToString的引數中,X大寫表示轉換的字元也是大寫,反之則為小寫
string StrResult = "";
for (int i = 0; i < result.Length; i++)
{
  StrResult = StrResult + result[i].ToString("X2");
}
  • 通過上面方法,最終生成32位元字串。
  1. 實際使用中有時會有16位元和32位元區分,實際16位元是由32位元,去除前後8位元后所得到的16位元字串,其中BitConverter.ToString(result,4,12);可以直接返回16位元的值
  2. 上面方法主要以字串為例,進行加密的演示,在實際中,檔案、圖片等其他資料也都可以轉換成位元組陣列進行加密。

以上是C#實現MD5加密的全部內容,針對該方法已經整理成完整的幫助類,專案已上傳至Gitee,可以直接下載使用
地址 :https://gitee.com/yang-yong-666/csharp
類檔案:YYEnAndDecryption.MD5Decryption.cs


個人交流QQ:1695690324
原創不易,轉載請註明出處
部落格園:https://www.cnblogs.com/yangyongdashen-S/
CSDN:https://blog.csdn.net/weixin_44312699?spm=1010.2135.3001.5343
Gitee:https://gitee.com/yang-yong-666
公眾號:yi人夕岸