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

    }
    }

  • 相关阅读:
    ETL利器Kettle实战应用解析系列一【Kettle使用介绍】
    彻底理解webservice SOAP WSDL
    5天玩转C#并行和多线程编程 —— 第三天 认识和使用Task
    5天玩转C#并行和多线程编程 —— 第一天 认识Parallel
    Data Leakage 因果性
    一张图,关于 Bayes error rate,贝叶斯错误率等的分析
    玩转Node.js单元测试
    Fundebug上线Node.js错误监控啦
    聊聊"jQuery is not defined"
    深究WeixinJSBridge未定义之因
  • 原文地址:https://www.cnblogs.com/jx270/p/3618652.html
Copyright © 2011-2022 走看看