using NUnit.Framework;
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Security.Cryptography;
using System.Security.Policy;
using System.Text;
using Unity.Android.Gradle.Manifest;
using static UnityEngine.Analytics.IAnalytic;
namespace AxibugEmuOnline.Client.Common
{
public static class Helper
{
public static long GetNowTimeStamp()
{
return GetTimeStamp(DateTime.Now);
}
///
/// 获取时间戳
///
///
public static long GetTimeStamp(DateTime dt)
{
TimeSpan ts = dt - new DateTime(1970, 1, 1, 0, 0, 0, 0);
return Convert.ToInt64(ts.TotalSeconds);
}
public static byte[] CompressByteArray(byte[] bytesToCompress)
{
using (var compressedMemoryStream = new MemoryStream())
using (var gzipStream = new GZipStream(compressedMemoryStream, CompressionMode.Compress))
{
gzipStream.Write(bytesToCompress, 0, bytesToCompress.Length);
gzipStream.Close();
return compressedMemoryStream.ToArray();
}
}
public static byte[] DecompressByteArray(byte[] compressedBytes)
{
using (var compressedMemoryStream = new MemoryStream(compressedBytes))
using (var gzipStream = new GZipStream(compressedMemoryStream, CompressionMode.Decompress))
using (var resultMemoryStream = new MemoryStream())
{
gzipStream.CopyTo(resultMemoryStream);
return resultMemoryStream.ToArray();
}
}
public static string FileMD5Hash(string filePath)
{
using (var md5 = MD5.Create())
{
using (var stream = File.OpenRead(filePath))
{
var hash = md5.ComputeHash(stream);
var sb = new StringBuilder(hash.Length * 2);
foreach (var b in hash)
sb.AppendFormat("{0:x2}", b);
return sb.ToString();
}
}
}
static byte[] FileMD5HashByte(byte[] data)
{
using (var md5 = MD5.Create())
{
using (var stream = new MemoryStream(data))
{
return md5.ComputeHash(stream);
}
}
}
///
/// 单个文件hash
///
///
///
public static string FileMD5Hash(byte[] data)
{
byte[] hash = FileMD5HashByte(data);
var sb = new StringBuilder(hash.Length * 2);
foreach (var b in hash)
sb.AppendFormat("{0:x2}", b);
return sb.ToString();
}
///
/// 多文件总hash (顺序不影响结果)
///
///
///
public static string FileMD5Hash(List dataList)
{
string allhash = string.Empty;
List temp = new List();
for (int i = 0; i < dataList.Count; i++)
{
if (dataList[i] == null)
continue;
temp.Add(FileMD5Hash(dataList[i]));
}
temp.Sort();
var sb = new StringBuilder();
for (int i = 0; i < temp.Count; i++)
{
sb.AppendLine(temp[i].ToString());
}
//这里用Ascll
return FileMD5Hash(Encoding.ASCII.GetBytes(sb.ToString()));
}
}
}