爲軟件生成授權的唯一代碼 CPUID+主板ID+內存ID

在開發應用軟件的時候比較多的情況下會要求生成一個唯一的代碼來確定是那個設備的相關數據,這裏舉例的環境爲Windows 操作系統下的生成唯一代碼的方法。

參與計算的硬件資源ID有 CPUID,主板ID和內存ID;具體樣例代碼如下:


        /// <summary>
        /// 獲取傳感器ID(16位HASH代碼)
        /// </summary>
        /// <returns></returns>
        private static string GetSensorID()
        {
            string sensorID = string.Empty;
            string basicID = GetCPUID() + GetMotherboardID() + GetPhysicalMemoryID();
            System.Security.Cryptography.MD5CryptoServiceProvider mD5CryptoServiceProvider = new System.Security.Cryptography.MD5CryptoServiceProvider();
            byte[] hashedBuff = mD5CryptoServiceProvider.ComputeHash(Encoding.UTF8.GetBytes(basicID));
            for (int i = 4; i < 12; i++)
            {
                sensorID += hashedBuff[i].ToString("X2");
            }
            return sensorID;
        }


        /// <summary>
        /// 獲得cpu序列號
        /// </summary>
        /// <returns></returns>
        private static string GetCPUID()
        {
            var myCpu = new ManagementClass("win32_Processor").GetInstances();
            var serial = "";
            foreach (ManagementObject cpu in myCpu)
            {
                var val = cpu.Properties["Processorid"].Value;
                serial += val == null ? "" : val.ToString();
            }
            return serial;
        }

        /// <summary>
        /// 獲取主板序列號
        /// </summary>
        /// <returns></returns>
        private static string GetMotherboardID()
        {
            var myMb = new ManagementClass("Win32_BaseBoard").GetInstances();
            var serial = "";
            foreach (ManagementObject mb in myMb)
            {
                var val = mb.Properties["SerialNumber"].Value;
                serial += val == null ? "" : val.ToString();
            }
            return serial;
        }

        /// <summary>
        /// 獲取所有內存信息,參考 CPUID 軟件
        /// </summary>
        /// <returns></returns>
        private static string GetPhysicalMemoryID()
        {
            string memoryID = "";
            ManagementObjectSearcher mos = new ManagementObjectSearcher("select * from Win32_PhysicalMemory");
            foreach (var prop in mos.Get())
            {
                memoryID = memoryID + prop["PartNumber"].ToString().Trim() + prop["SerialNumber"].ToString().Trim();
            }
            return memoryID;
        }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章