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

    }
    }

  • 相关阅读:
    DP:Multiplication Puzzle(POJ 1651)
    Heap:Expedition(POJ 2431)
    velocity.js 动画插件
    ES6 新特性
    ps p图
    php 建站 多域名配置 自定义重定向
    移动端开发 资源分享
    拖拽 初体验
    颜色选择器 rgb 与16进制 颜色转换
    web 常用颜色
  • 原文地址:https://www.cnblogs.com/jx270/p/3618652.html
Copyright © 2011-2022 走看看