今天本人就借助.NET平台下的公共类库来实现一机一码注册算法。在此之前先来介绍一下一机一码的注册原理及与一码一序列号的比较。
之所以是一机指的就是通过获取机器硬件(主要是硬盘和CPU)的一些信息作为注册序列号的一部分,因为目前世界上所有厂家生产的每个硬盘和每个CPU都有自己独有的一些ID号等硬件信息(理论上是如此但实际上也许有一样的,不过那种几率很低,予以忽略不计了),通过一定算法将这些硬件信息读取出来作为注册码,这样就免除了不同机器可以使用相同注册序列号的问题,一码一序列号就是因为这样才造成了只要一个有注册码和序列号被发布到网上别人就可以正常使用软件这种一码通用的现象。
//CPU列号读取函数//CPU列号读取函数 private string CpuId() { try { ManagementObjectCollection collection1 = new ManagementClass("Win32_Processor").GetInstances(); string strCpuID = null; foreach (ManagementObject obj1 in collection1) { strCpuID = obj1.Properties["ProcessorId"].Value.ToString(); break; } return strCpuID; } catch { return "strCpuID"; } }
硬盘序列号读取函数 //硬盘序列号读取函数 private string DiskId() { try { ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia"); String strHardDiskID = null; foreach (ManagementObject mo in searcher.Get()) { strHardDiskID = mo["SerialNumber"].ToString().Trim(); break; } return strHardDiskID; } catch { return "strHardDiskID"; } }
以上只完成了全部算法的一部分,接下来就是记录注册信息,这个一般都是记录在系统注册表中,这就涉及到注册表的读写,实际并不复杂,这里将读写注册表的代码也写下来了:
硬盘序列号读取函数 //读取注册表注册信息 RegistryKey softwareKey = Registry.LocalMachine.OpenSubKey("SOFTWARE"); RegistryKey choseKey = softwareKey.OpenSubKey("SOW"); RegistryKey SowKey = choseKey.OpenSubKey("Regexample"); this.textBox2.Text = SowKey.GetValue("SerialId").ToString(); this.textBox1.Text = SowKey.GetValue("RegisterCode").ToString(); //写入注册表注册信息 RegistryKey softwareKey = Registry.LocalMachine.OpenSubKey("SOFTWARE",true); RegistryKey choseKey = softwareKey.CreateSubKey("SOW"); RegistryKey ValueKey = choseKey.CreateSubKey("Regexample"); ValueKey.SetValue("SerialId", SerialId().ToString()); ValueKey.SetValue("RegisterCode", this.textBox1.Text); //注:实际注册表读写信息: //[HKEY_LOCAL_MACHINE\SOFTWARE\SOW\Regexample] //"SerialId"="-1587187206" //"RegisterCode"="-1587187206"