• 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为每次都是两位数

  • 相关阅读:
    Js全选 添加和单独删除
    H5新手快速入门 简单布局
    DOM 节点 课程表
    Datalogic组网模式下通讯
    svn检出的时候报 Unable to connect to a repository at URL错误(摘自CSDN)
    Subsonic使用中
    HTTP 错误 500.21
    WinForm下增加声音提示
    IIS7.0发布Web服务器0002
    IIS7.0发布Web服务-0001
  • 原文地址:https://www.cnblogs.com/qq2806933146xiaobai/p/15561274.html
Copyright © 2020-2023  润新知