private string GetHWInfo()
{
const string Win32_Processor = "Win32_Processor";
const string Win32_DiskDrive = "Win32_DiskDrive";
const string Win32_NetworkAdapterConfiguration = "Win32_NetworkAdapterConfiguration";
string cpuInfo = string.Empty;//cpu序列号
string hdIDInfo = string.Empty;//硬盘ID
string macInfo = string.Empty;//网卡MAC地址
//获取CPU序列号
using (System.Management.ManagementClass mcCPU = new System.Management.ManagementClass(Win32_Processor))
using (System.Management.ManagementObjectCollection mocCPU = mcCPU.GetInstances())
{
foreach (System.Management.ManagementObject mo in mocCPU)
{
cpuInfo = Convert.ToString(mo.Properties["ProcessorId"].Value);
}
}
//获取硬盘序列号
using (System.Management.ManagementClass mcHD = new System.Management.ManagementClass(Win32_DiskDrive))
using (System.Management.ManagementObjectCollection mocHD = mcHD.GetInstances())
{
foreach (System.Management.ManagementObject mo in mocHD)
{
hdIDInfo = Convert.ToString(mo.Properties["Model"].Value);
}
}
//获取网卡MAC地址
using (System.Management.ManagementClass mcMAC = new System.Management.ManagementClass(Win32_NetworkAdapterConfiguration))
using (System.Management.ManagementObjectCollection mocMAC = mcMAC.GetInstances())
{
foreach (System.Management.ManagementObject mo in mocMAC)
{
if ((bool)mo["IPEnabled"] == true)
{
macInfo = Convert.ToString(mo["MacAddress"]);
break;
}
}
}
return string.Format("{0}{1}{2}", cpuInfo, hdIDInfo, macInfo);
}
/// <summary>
/// 取得公/密钥值
/// </summary>
/// <param name="publicKey"></param>
/// <param name="privateKey"></param>
private void GetKey(out string publicKey, out string privateKey)
{
publicKey = string.Empty;
privateKey = string.Empty;
using (System.Security.Cryptography.RSACryptoServiceProvider rsa = new System.Security.Cryptography.RSACryptoServiceProvider())
{
publicKey = rsa.ToXmlString(false);
privateKey = rsa.ToXmlString(true);
}
}
private string Encrypt(string privateKey, string HWInfo)
{
using (System.Security.Cryptography.RSACryptoServiceProvider rsa = new System.Security.Cryptography.RSACryptoServiceProvider())
{
rsa.FromXmlString(privateKey);
// 加密对象
System.Security.Cryptography.RSAPKCS1SignatureFormatter f = new System.Security.Cryptography.RSAPKCS1SignatureFormatter(rsa);
f.SetHashAlgorithm("SHA1");
byte[] source = System.Text.ASCIIEncoding.ASCII.GetBytes(HWInfo);
System.Security.Cryptography.SHA1Managed sha = new System.Security.Cryptography.SHA1Managed();
byte[] result = sha.ComputeHash(source);
byte[] b = f.CreateSignature(result);
return b == null ? string.Empty : Convert.ToBase64String(b);
}
}
private bool Decrypt(string publicKey, string encryptedString, string HWInfo)
{
using (System.Security.Cryptography.RSACryptoServiceProvider rsa = new System.Security.Cryptography.RSACryptoServiceProvider())
{
rsa.FromXmlString(publicKey);
// 解密对象
System.Security.Cryptography.RSAPKCS1SignatureDeformatter f = new System.Security.Cryptography.RSAPKCS1SignatureDeformatter(rsa);
f.SetHashAlgorithm("SHA1");
byte[] key = Convert.FromBase64String(encryptedString);
System.Security.Cryptography.SHA1Managed sha = new System.Security.Cryptography.SHA1Managed();
byte[] name = sha.ComputeHash(ASCIIEncoding.ASCII.GetBytes(HWInfo));
return f.VerifySignature(name, key);
}
}