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($"{machTestData["SystemName"]}|");
sb.Append($"{machTestData["ProcessorId"]}|");
sb.Append($"{machTestData["PartNumber"]}|");
sb.Append($"{machTestData["MACAddress"]}|");
sb.Append($"{machTestData["SerialNumber"]}|");
sb.Append($"{machTestData["OSArchitecture"]}|");
sb.Append($"{machTestData["SoftwareElementID"]}|");
sb.Append($"{machTestData["SystemBiosMajorVersion"]}|");
sb.Append($"{machTestData["SystemBiosMinorVersion"]}|");
sb.Append($"{machTestData["CpuVersion"]}|");
sb.Append($"{machTestData["BiosVersion"]}|");
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
}
}