using System;using System.IO;using System.Security.Cryptography;using System.Text;namespace ConsoleApp_PReventFileTampering{ class Program { static void Main(string[] args) { //TestGetFileHash(); TestGetMd5(); } #region 通過Hash值來驗證文件是否被篡改 public static void TestGetFileHash() { string fileHash = ""; while (true) { fileHash = GetFileHash(@"C:/error.txt"); Console.WriteLine("文件MD5-HASH值為:{0}", fileHash); Console.ReadKey(); //手動修改文件試試,HASH值會變化 //手動將剛才的修改恢復,HASH值會還原 } } /// <summary> /// 通過Hash值來驗證文件是否被篡改 /// </summary> /// <param name="argFilePath">文件路徑</param> /// <returns>輸出Hash值</returns> public static string GetFileHash(string argFilePath) { using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider()) using (FileStream fs = new FileStream(argFilePath, FileMode.Open, Fileaccess.Read, FileShare.Read)) { return BitConverter.ToString(md5.ComputeHash(fs)).Replace("-", ""); } } #endregion #region 對字符串用MD5加密 public static void TestGetMd5() { while (true) { Console.WriteLine("輸入要加密的字符串:"); string input = Console.ReadLine(); string md5 = GetMd5Hash2(input); Console.WriteLine("輸出的加密字符串為:" + md5 + "/r/n"); Console.ReadLine(); } } /// <summary> /// 將字符串轉換成MD5值存儲 /// 【直接使用本方法加密MD5是不安全的,可以通過窮舉法獲得加密前的字符串】 /// </summary> /// <param name="argInput">輸入的字符串</param> /// <returns>輸出的MD5值</returns> public static string GetMd5Hash(string argInput) { using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider()) { return BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(argInput))).Replace("-", ""); } } /// <summary> /// 多次使用MD5值以及內部拼hashKey法,增加窮舉破解的難度 /// </summary> /// <param name="argInput">輸入的字符串</param> /// <returns>輸出特殊處理過的MD5值</returns> public static string GetMd5Hash2(string argInput) { string hashKey = "Kae@#$@!,.Js+{f>.294oE"; using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider()) { string hashCode = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(argInput))) .Replace("-", "") + BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(hashKey))) .Replace("-", ""); return BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(hashCode))).Replace("-", ""); } } #endregion }}
|
新聞熱點
疑難解答