using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Security.Cryptography; using System.Text; namespace Core { /// /// Init classe validatore /// public class MachineDataValidator { #region Public Constructors /// /// Init classe validatore /// /// public MachineDataValidator(string rawData) { // inizializzo info di base Dictionary currMachineData = new Dictionary(); if (!string.IsNullOrEmpty(rawData)) { try { currMachineData = JsonConvert.DeserializeObject>(rawData); } catch(Exception exc) { } } machTestData = currMachineData; } #endregion Public Constructors #region Public Properties /// /// Restituisce HASH del codice impiego = payload utente /// /// public string machineKeyHash { get => calcMachineHash(); } #endregion Public Properties #region Private Fields /// /// Dati rispetto cui fare i calcoli di validazione /// private Dictionary machTestData = new Dictionary(); #endregion Private Fields #region Private Methods /// /// Calcola HASH del codice impiego = payload utente /// /// private string calcMachineHash() { string hash = ""; string buffData = currBaseBuffer(); if (!string.IsNullOrEmpty(buffData)) { // hashing! using (var hAlgo = SHA512.Create()) //using (var hAlgo = MD5.Create()) { byte[] InputBytes = Encoding.UTF8.GetBytes(buffData); var byteHash = hAlgo.ComputeHash(InputBytes); hash = BitConverter.ToString(byteHash).Replace("-", "").Replace("/", "").Replace("\\", "").ToLowerInvariant(); } } return hash; } public bool hasValidData { get => machTestData != null && machTestData.Count > 0; } /// /// Calcola hash key da info PC /// /// private string currBaseBuffer() { string answ = "????????????????????????????????????????????"; StringBuilder sb = new StringBuilder(); try { // calcolo hashKey da alcuni valori solamente sb.Append($"{getDictVal("SystemName")}|"); sb.Append($"{getDictVal("ProcessorId")}|"); sb.Append($"{getDictVal("PartNumber")}|"); sb.Append($"{getDictVal("MACAddress")}|"); sb.Append($"{getDictVal("SerialNumber")}|"); sb.Append($"{getDictVal("Architecture")}|"); sb.Append($"{getDictVal("SoftwareElementID")}|"); sb.Append($"{getDictVal("SystemBiosMajorVersion")}|"); sb.Append($"{getDictVal("SystemBiosMinorVersion")}|"); if (sb.Length > 0) { answ = sb.ToString(); // lo uso 2 volte dritto e reverse... answ += ReverseString(sb.ToString()); } } catch { } return answ; } /// /// Recupera info da dictionary /// /// /// private string getDictVal(string keyName) { string answ = $"{keyName}{keyName}"; if (machTestData.ContainsKey(keyName)) { answ = machTestData[keyName]; } return answ; } /// /// Esegue reverse delal stringa /// /// /// private string ReverseString(string myStr) { char[] myArr = myStr.ToCharArray(); Array.Reverse(myArr); return new string(myArr); } #endregion Private Methods } }