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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下