標籤:app dig 實現 linq gen 碰撞 c# pac utf8
什麼是MD5?
MD5即Message-Digest Algorithm 5(資訊-摘要演算法5),用於確保資訊傳輸完整一致。是電腦廣泛使用的雜湊演算法之一,主流程式設計語言普遍已有MD5實現。
MD5的特點:
- 壓縮性:任意長度的資料,算出的MD5值長度都是固定的。
- 容易計算:從原資料計算出MD5值很容易。
- 抗修改性:對原資料進行任何改動,哪怕只修改1個位元組,所得到的MD5值都有很大區別。
- 強抗碰撞:已知原資料和其MD5值,想找到一個具有相同MD5值的資料(即偽造資料)是非常困難的。
1 using System; 2 using System.Collections.Generic; 3 using System.IO; 4 using System.Linq; 5 using System.Security.Cryptography; 6 using System.Text; 7 using System.Threading.Tasks; 8 9 namespace ConsoleApplication110 {11 public class MD5Helper12 {13 /// <summary>14 /// 計算位元組數組的 MD5 值15 /// </summary>16 /// <param name="buffer"></param>17 /// <returns></returns>18 public static string CalcMD5(byte[] buffer)19 {20 using (MD5 md5 = MD5.Create())21 {22 byte[] md5Bytes = md5.ComputeHash(buffer);23 return BytesToString(md5Bytes);24 }25 }26 27 /// <summary>28 /// 將得到的 MD5 位元組數組轉成 字串29 /// </summary>30 /// <param name="md5Bytes"></param>31 /// <returns></returns>32 private static string BytesToString(byte[] md5Bytes)33 {34 StringBuilder sb = new StringBuilder();35 for (int i = 0; i < md5Bytes.Length; i++)36 {37 sb.Append(md5Bytes[i].ToString("X2"));38 }39 return sb.ToString();40 }41 42 /// <summary>43 /// 計算字串的 MD5 值44 /// </summary>45 /// <param name="str"></param>46 /// <returns></returns>47 public static string CalcMD5(string str)48 {49 byte[] buffer = Encoding.UTF8.GetBytes(str);50 return CalcMD5(buffer);51 }52 53 /// <summary>54 /// 計算流的 MD5 值55 /// </summary>56 /// <param name="stream"></param>57 /// <returns></returns>58 public static string CalcMD5(Stream stream)59 {60 using (MD5 md5 = MD5.Create())61 {62 byte[] buffer = md5.ComputeHash(stream);63 return BytesToString(buffer);64 }65 }66 }67 }
C#實現MD5