This commit is contained in:
parent
dc1fd35524
commit
a180ede8cf
|
|
@ -15,107 +15,29 @@ namespace MotionFramework.Utility
|
||||||
return result.ToLower();
|
return result.ToLower();
|
||||||
}
|
}
|
||||||
|
|
||||||
#region SHA1 [已废弃 - 使用SHA256替代]
|
#region SHA1
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取字符串的Hash值(已废弃,请使用StringSHA256)
|
/// 获取字符串的Hash值
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <remarks>
|
|
||||||
/// SHA1算法已被认为不安全,已替换为SHA256实现。保留此方法仅为向后兼容。
|
|
||||||
/// </remarks>
|
|
||||||
[System.Obsolete("SHA1算法不安全,请使用StringSHA256方法", false)]
|
|
||||||
public static string StringSHA1(string str)
|
public static string StringSHA1(string str)
|
||||||
{
|
|
||||||
// 已替换为SHA256实现以提高安全性
|
|
||||||
return StringSHA256(str);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 获取文件的Hash值(已废弃,请使用FileSHA256)
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>
|
|
||||||
/// SHA1算法已被认为不安全,已替换为SHA256实现。保留此方法仅为向后兼容。
|
|
||||||
/// </remarks>
|
|
||||||
[System.Obsolete("SHA1算法不安全,请使用FileSHA256方法", false)]
|
|
||||||
public static string FileSHA1(string filePath)
|
|
||||||
{
|
|
||||||
// 已替换为SHA256实现以提高安全性
|
|
||||||
return FileSHA256(filePath);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 获取数据流的Hash值(已废弃,请使用StreamSHA256)
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>
|
|
||||||
/// SHA1算法已被认为不安全,已替换为SHA256实现。保留此方法仅为向后兼容。
|
|
||||||
/// </remarks>
|
|
||||||
[System.Obsolete("SHA1算法不安全,请使用StreamSHA256方法", false)]
|
|
||||||
public static string StreamSHA1(Stream stream)
|
|
||||||
{
|
|
||||||
// 已替换为SHA256实现以提高安全性
|
|
||||||
return StreamSHA256(stream);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 获取字节数组的Hash值(已废弃,请使用BytesSHA256)
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>
|
|
||||||
/// SHA1算法已被认为不安全,已替换为SHA256实现。保留此方法仅为向后兼容。
|
|
||||||
/// </remarks>
|
|
||||||
[System.Obsolete("SHA1算法不安全,请使用BytesSHA256方法", false)]
|
|
||||||
public static string BytesSHA1(byte[] buffer)
|
|
||||||
{
|
|
||||||
// 已替换为SHA256实现以提高安全性
|
|
||||||
return BytesSHA256(buffer);
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region SHA256 [推荐使用]
|
|
||||||
/// <summary>
|
|
||||||
/// 获取字符串的SHA256哈希值(推荐使用)
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="str">要计算哈希的字符串</param>
|
|
||||||
/// <returns>SHA256哈希值的十六进制字符串</returns>
|
|
||||||
public static string StringSHA256(string str)
|
|
||||||
{
|
{
|
||||||
byte[] buffer = Encoding.UTF8.GetBytes(str);
|
byte[] buffer = Encoding.UTF8.GetBytes(str);
|
||||||
return BytesSHA256(buffer);
|
return BytesSHA1(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取文件的SHA256哈希值(推荐使用)
|
/// 获取文件的Hash值
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="filePath">文件路径</param>
|
public static string FileSHA1(string filePath)
|
||||||
/// <returns>SHA256哈希值的十六进制字符串,如果文件不存在或读取失败则返回空字符串</returns>
|
|
||||||
public static string FileSHA256(string filePath)
|
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
|
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
|
||||||
{
|
{
|
||||||
return StreamSHA256(fs);
|
return StreamSHA1(fs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (FileNotFoundException e)
|
catch (Exception e)
|
||||||
{
|
|
||||||
MotionLog.Exception($"文件不存在: {filePath}\n{e}");
|
|
||||||
return string.Empty;
|
|
||||||
}
|
|
||||||
catch (DirectoryNotFoundException e)
|
|
||||||
{
|
|
||||||
MotionLog.Exception($"目录不存在: {filePath}\n{e}");
|
|
||||||
return string.Empty;
|
|
||||||
}
|
|
||||||
catch (UnauthorizedAccessException e)
|
|
||||||
{
|
|
||||||
MotionLog.Exception($"访问被拒绝,权限不足: {filePath}\n{e}");
|
|
||||||
return string.Empty;
|
|
||||||
}
|
|
||||||
catch (ArgumentException e)
|
|
||||||
{
|
|
||||||
MotionLog.Exception($"参数错误: {filePath}\n{e}");
|
|
||||||
return string.Empty;
|
|
||||||
}
|
|
||||||
catch (IOException e)
|
|
||||||
{
|
{
|
||||||
MotionLog.Exception(e.ToString());
|
MotionLog.Exception(e.ToString());
|
||||||
return string.Empty;
|
return string.Empty;
|
||||||
|
|
@ -123,18 +45,13 @@ namespace MotionFramework.Utility
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取数据流的SHA256哈希值(推荐使用)
|
/// 获取数据流的Hash值
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="stream">要计算哈希的数据流</param>
|
public static string StreamSHA1(Stream stream)
|
||||||
/// <returns>SHA256哈希值的十六进制字符串</returns>
|
|
||||||
/// <remarks>
|
|
||||||
/// 使用SHA256算法,生成256位的散列码,提供更高的安全性
|
|
||||||
/// </remarks>
|
|
||||||
public static string StreamSHA256(Stream stream)
|
|
||||||
{
|
{
|
||||||
// 使用SHA256算法替代不安全的SHA1,提供更高的安全性
|
// 说明:创建的是SHA1类的实例,生成的是160位的散列码
|
||||||
// 使用 using 语句确保资源正确释放,防止资源泄漏
|
// 使用 using 语句确保资源正确释放,防止资源泄漏
|
||||||
using (SHA256 hash = SHA256.Create())
|
using (HashAlgorithm hash = HashAlgorithm.Create())
|
||||||
{
|
{
|
||||||
byte[] hashBytes = hash.ComputeHash(stream);
|
byte[] hashBytes = hash.ComputeHash(stream);
|
||||||
return ToString(hashBytes);
|
return ToString(hashBytes);
|
||||||
|
|
@ -142,18 +59,13 @@ namespace MotionFramework.Utility
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取字节数组的SHA256哈希值(推荐使用)
|
/// 获取字节数组的Hash值
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="buffer">要计算哈希的字节数组</param>
|
public static string BytesSHA1(byte[] buffer)
|
||||||
/// <returns>SHA256哈希值的十六进制字符串</returns>
|
|
||||||
/// <remarks>
|
|
||||||
/// 使用SHA256算法,生成256位的散列码,提供更高的安全性
|
|
||||||
/// </remarks>
|
|
||||||
public static string BytesSHA256(byte[] buffer)
|
|
||||||
{
|
{
|
||||||
// 使用SHA256算法替代不安全的SHA1,提供更高的安全性
|
// 说明:创建的是SHA1类的实例,生成的是160位的散列码
|
||||||
// 使用 using 语句确保资源正确释放,防止资源泄漏
|
// 使用 using 语句确保资源正确释放,防止资源泄漏
|
||||||
using (SHA256 hash = SHA256.Create())
|
using (HashAlgorithm hash = HashAlgorithm.Create())
|
||||||
{
|
{
|
||||||
byte[] hashBytes = hash.ComputeHash(buffer);
|
byte[] hashBytes = hash.ComputeHash(buffer);
|
||||||
return ToString(hashBytes);
|
return ToString(hashBytes);
|
||||||
|
|
@ -161,57 +73,59 @@ namespace MotionFramework.Utility
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region MD5 [已废弃 - 使用SHA256替代]
|
#region MD5
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取字符串的MD5(已废弃,请使用StringSHA256)
|
/// 获取字符串的MD5
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <remarks>
|
|
||||||
/// MD5算法已被认为不安全,已替换为SHA256实现。保留此方法仅为向后兼容。
|
|
||||||
/// </remarks>
|
|
||||||
[System.Obsolete("MD5算法不安全,请使用StringSHA256方法", false)]
|
|
||||||
public static string StringMD5(string str)
|
public static string StringMD5(string str)
|
||||||
{
|
{
|
||||||
// 已替换为SHA256实现以提高安全性
|
byte[] buffer = Encoding.UTF8.GetBytes(str);
|
||||||
return StringSHA256(str);
|
return BytesMD5(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取文件的MD5(已废弃,请使用FileSHA256)
|
/// 获取文件的MD5
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <remarks>
|
|
||||||
/// MD5算法已被认为不安全,已替换为SHA256实现。保留此方法仅为向后兼容。
|
|
||||||
/// </remarks>
|
|
||||||
[System.Obsolete("MD5算法不安全,请使用FileSHA256方法", false)]
|
|
||||||
public static string FileMD5(string filePath)
|
public static string FileMD5(string filePath)
|
||||||
{
|
{
|
||||||
// 已替换为SHA256实现以提高安全性
|
try
|
||||||
return FileSHA256(filePath);
|
{
|
||||||
|
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
|
||||||
|
{
|
||||||
|
return StreamMD5(fs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
MotionLog.Exception(e.ToString());
|
||||||
|
return string.Empty;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取数据流的MD5(已废弃,请使用StreamSHA256)
|
/// 获取数据流的MD5
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <remarks>
|
|
||||||
/// MD5算法已被认为不安全,已替换为SHA256实现。保留此方法仅为向后兼容。
|
|
||||||
/// </remarks>
|
|
||||||
[System.Obsolete("MD5算法不安全,请使用StreamSHA256方法", false)]
|
|
||||||
public static string StreamMD5(Stream stream)
|
public static string StreamMD5(Stream stream)
|
||||||
{
|
{
|
||||||
// 已替换为SHA256实现以提高安全性
|
// 使用 using 语句确保资源正确释放,防止资源泄漏
|
||||||
return StreamSHA256(stream);
|
using (MD5 md5 = MD5.Create())
|
||||||
|
{
|
||||||
|
byte[] hashBytes = md5.ComputeHash(stream);
|
||||||
|
return ToString(hashBytes);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取字节数组的MD5(已废弃,请使用BytesSHA256)
|
/// 获取字节数组的MD5
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <remarks>
|
|
||||||
/// MD5算法已被认为不安全,已替换为SHA256实现。保留此方法仅为向后兼容。
|
|
||||||
/// </remarks>
|
|
||||||
[System.Obsolete("MD5算法不安全,请使用BytesSHA256方法", false)]
|
|
||||||
public static string BytesMD5(byte[] buffer)
|
public static string BytesMD5(byte[] buffer)
|
||||||
{
|
{
|
||||||
// 已替换为SHA256实现以提高安全性
|
// 使用 using 语句确保资源正确释放,防止资源泄漏
|
||||||
return BytesSHA256(buffer);
|
using (MD5 md5 = MD5.Create())
|
||||||
|
{
|
||||||
|
byte[] hashBytes = md5.ComputeHash(buffer);
|
||||||
|
return ToString(hashBytes);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
@ -237,27 +151,7 @@ namespace MotionFramework.Utility
|
||||||
return StreamCRC32(fs);
|
return StreamCRC32(fs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (FileNotFoundException e)
|
catch (Exception e)
|
||||||
{
|
|
||||||
MotionLog.Exception($"文件不存在: {filePath}\n{e}");
|
|
||||||
return string.Empty;
|
|
||||||
}
|
|
||||||
catch (DirectoryNotFoundException e)
|
|
||||||
{
|
|
||||||
MotionLog.Exception($"目录不存在: {filePath}\n{e}");
|
|
||||||
return string.Empty;
|
|
||||||
}
|
|
||||||
catch (UnauthorizedAccessException e)
|
|
||||||
{
|
|
||||||
MotionLog.Exception($"访问被拒绝,权限不足: {filePath}\n{e}");
|
|
||||||
return string.Empty;
|
|
||||||
}
|
|
||||||
catch (ArgumentException e)
|
|
||||||
{
|
|
||||||
MotionLog.Exception($"参数错误: {filePath}\n{e}");
|
|
||||||
return string.Empty;
|
|
||||||
}
|
|
||||||
catch (IOException e)
|
|
||||||
{
|
{
|
||||||
MotionLog.Exception(e.ToString());
|
MotionLog.Exception(e.ToString());
|
||||||
return string.Empty;
|
return string.Empty;
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,11 @@ namespace Cysharp.Threading.Tasks
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override bool Equals(object obj)
|
||||||
|
{
|
||||||
|
return base.Equals(obj);
|
||||||
|
}
|
||||||
|
|
||||||
public bool Equals(AsyncUnit other)
|
public bool Equals(AsyncUnit other)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue