获取硬件信息并加密

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);
    }
}

  

posted @ 2011-08-17 11:49  石头最好  阅读(380)  评论(0)    收藏  举报