using System; using System.Collections.Generic; using System.Text; using System.Linq; using System.IO; using System.Security.Cryptography; namespace Saviour_Backup_System { class tools { public static string Trim(string value, int maxLength) { if (value.Length > maxLength) { return value.Substring(0, maxLength - 3) + "..."; } return value; } public static string hash(string input) { // step 1, calculate MD5 hash from input MD5 md5 = MD5.Create(); byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input); byte[] hash = md5.ComputeHash(inputBytes); // step 2, convert byte array to hex string StringBuilder sb = new StringBuilder(); for (int i = 0; i < hash.Length; i++) { sb.Append(hash[i].ToString("X2")); } return sb.ToString(); } public static Int64 getUnixTimeStamp() { return (Int64)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; } public static string hashDirectory(string path) { // assuming you want to include nested folders var files = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories) .OrderBy(p => p).ToList(); MD5 md5 = MD5.Create(); for (int i = 0; i < files.Count; i++) { string file = files[i]; // hash path string relativePath = file.Substring(path.Length + 1); byte[] pathBytes = Encoding.UTF8.GetBytes(relativePath.ToLower()); md5.TransformBlock(pathBytes, 0, pathBytes.Length, pathBytes, 0); // hash contents byte[] contentBytes = File.ReadAllBytes(file); if (i == files.Count - 1) md5.TransformFinalBlock(contentBytes, 0, contentBytes.Length); else md5.TransformBlock(contentBytes, 0, contentBytes.Length, contentBytes, 0); } return BitConverter.ToString(md5.Hash).Replace("-", "").ToLower(); } public static DateTime unixDateTime(long unixTimeStamp) { // Unix timestamp is seconds past epoch System.DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc); dtDateTime = dtDateTime.AddSeconds(unixTimeStamp).ToLocalTime(); return dtDateTime; } } }