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

    }
    }

  • 相关阅读:
    SEO常用外链资源站整理分享
    不同的LINUX系统,跨服务器快速拷贝文件
    WPS表格、Excel常用技巧大全,99%人都不知道,但非常实用!
    php 5.4中php-fpm 的重启、终止操作命令
    帝国CMS伪静态
    Centos7访问Win7/Win10系统中的共享文件
    H3C S5500三层交换机划分Vlan与H3C路由组网
    H3C S5500V2交换机误格式化恢复
    linux_centos7_时间更新
    Centos7安装mysql数据库
  • 原文地址:https://www.cnblogs.com/jx270/p/3618652.html
Copyright © 2011-2022 走看看