C# MD5算法 16 32 大小写

MD5算法

/**
*┌──────────────────────────────────────────────────────────────┐
*│ 描    述:日志相关的工具类                                                   
*│ 作    者:执笔小白                                              
*│ 版    本:1.0                                       
*│ 创建时间:2020-6-13 15:40:56                            
*└──────────────────────────────────────────────────────────────┘
*┌──────────────────────────────────────────────────────────────┐
*│ 命名空间: WMSTOMESTT                               
*│ 类    名:ETools                                     
*└──────────────────────────────────────────────────────────────┘
*/
using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace ZhibiXiaobai.Uril.EDEHelper
{
    public class Md5Helper
    {
        /// <summary>
        /// 计算字符串的MD5
        /// </summary>
        /// <param name="str">需要计算的字符串</param>
        /// <param name="md5_16">需不需要返回16位,默认32位</param>
        /// <param name="capital">需不需要返回大写,默认小写</param>
        /// <returns></returns>
        public static string GetMD5Value_String(string str = "", bool md5_16 = false, bool capital = false)
        {
            string pwd = "";
            MD5 md5 = MD5.Create();  //实例化一个md5对象
            byte[] s = md5.ComputeHash(UTF8Encoding.UTF8.GetBytes(str));

            // 大写
            if (capital)
            {
                for (int i = 0; i < s.Length; i++)
                {
                    // --X为十六进制,2为每次都是两位数
                    pwd = pwd + s[i].ToString("X2");  // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母
                }
            }
            else
            {
                for (int i = 0; i < s.Length; i++)  // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符 
                {
                    pwd = pwd + s[i].ToString("X2").ToLower();
                }
            }

            // 16位
            if (md5_16)
            {
                pwd = pwd.Substring(4, 16);
            }
            return pwd;
        }

        /// <summary>
        /// 计算文件的MD5值
        /// </summary>
        /// <param name="fileName">需要计算md5值的文件的路径</param>
        /// <param name="md5_16">需不需要返回16位,默认32位</param>
        /// <param name="capital">需不需要返回大写,默认小写</param>
        /// <returns></returns>
        public static string GetMD5Value_File(string fileName = "", bool md5_16 = false, bool capital = false)
        {
            string pwd = "";
            MD5 md5 = MD5.Create();  //实例化一个md5对象
            using (FileStream file = new FileStream(fileName, System.IO.FileMode.Open))
            {
                byte[] s = md5.ComputeHash(file);
                file.Close();

                // 大写
                if (capital)
                {
                    for (int i = 0; i < s.Length; i++)
                    {
                        // --X为十六进制,2为每次都是两位数
                        pwd = pwd + s[i].ToString("X2");  // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母
                    }
                }
                else
                {
                    for (int i = 0; i < s.Length; i++)  // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符 
                    {
                        pwd = pwd + s[i].ToString("X2").ToLower();
                    }
                }

                // 16位
                if (md5_16)
                {
                    pwd = pwd.Substring(4, 16);
                }
            }
            return pwd;
        }
    }
}

补充-记一次错误:

    第一次算法中用的是‘s[i].ToString("X")’出错,找了下是因为少了1位,03只输出了3,改为s[i].ToString("X2")变成正常。

1.str.ToString("X2")解释:

    X为十六进制,

    2为每次都是两位数

原文地址:https://www.cnblogs.com/qq2806933146xiaobai/p/15561274.html