153 lines
4.7 KiB
C#
153 lines
4.7 KiB
C#
using Newtonsoft.Json;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Security.Cryptography;
|
|
using System.Text;
|
|
|
|
namespace Core
|
|
{
|
|
/// <summary>
|
|
/// Init classe validatore
|
|
/// </summary>
|
|
public class MachineDataValidator
|
|
{
|
|
#region Public Constructors
|
|
|
|
/// <summary>
|
|
/// Init classe validatore
|
|
/// </summary>
|
|
/// <param name="currMachineData"></param>
|
|
public MachineDataValidator(string rawData)
|
|
{
|
|
// inizializzo info di base
|
|
Dictionary<string, string> currMachineData = new Dictionary<string, string>();
|
|
if (!string.IsNullOrEmpty(rawData))
|
|
{
|
|
try
|
|
{
|
|
currMachineData = JsonConvert.DeserializeObject<Dictionary<string, string>>(rawData);
|
|
}
|
|
catch(Exception exc)
|
|
{ }
|
|
}
|
|
machTestData = currMachineData;
|
|
}
|
|
|
|
#endregion Public Constructors
|
|
|
|
#region Public Properties
|
|
|
|
/// <summary>
|
|
/// Restituisce HASH del codice impiego = payload utente
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public string machineKeyHash
|
|
{
|
|
get => calcMachineHash();
|
|
}
|
|
|
|
#endregion Public Properties
|
|
|
|
#region Private Fields
|
|
|
|
/// <summary>
|
|
/// Dati rispetto cui fare i calcoli di validazione
|
|
/// </summary>
|
|
private Dictionary<string, string> machTestData = new Dictionary<string, string>();
|
|
|
|
#endregion Private Fields
|
|
|
|
#region Private Methods
|
|
|
|
/// <summary>
|
|
/// Calcola HASH del codice impiego = payload utente
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Calcola hash key da info PC
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Recupera info da dictionary
|
|
/// </summary>
|
|
/// <param name="keyName"></param>
|
|
/// <returns></returns>
|
|
private string getDictVal(string keyName)
|
|
{
|
|
string answ = $"{keyName}{keyName}";
|
|
if (machTestData.ContainsKey(keyName))
|
|
{
|
|
answ = machTestData[keyName];
|
|
}
|
|
return answ;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Esegue reverse delal stringa
|
|
/// </summary>
|
|
/// <param name="myStr"></param>
|
|
/// <returns></returns>
|
|
private string ReverseString(string myStr)
|
|
{
|
|
char[] myArr = myStr.ToCharArray();
|
|
Array.Reverse(myArr);
|
|
return new string(myArr);
|
|
}
|
|
|
|
#endregion Private Methods
|
|
}
|
|
} |