zoukankan      html  css  js  c++  java
  • 【.NET】MD5的用法(对文件、字符串)

    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 + " ");
    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

    }
    }

  • 相关阅读:
    添加语句<tx:annotation-driven transaction-manager="txManager"/>报错
    ssh学习(1)
    C.Sum 2017 ACM-ICPC 亚洲区(西安赛区)网络赛
    Problem 1004-2017 ACM/ICPC Asia Regional Shenyang Online
    Problem 1002-2017 ACM/ICPC Asia Regional Shenyang Online
    2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛- A. Banana
    HDU 1052 Tian Ji -- The Horse Racing(贪心)
    HDU 1236 排名
    HDU 2550 百步穿杨
    HDU 1084 What Is Your Grade?(排序)
  • 原文地址:https://www.cnblogs.com/jx270/p/3618652.html
Copyright © 2011-2022 走看看