同一般的软件注册一样, 我们这里的注册是这样进行的: 1. 首先根据用户的硬件信息生成 24 位的机器码 -- 相当于种子,用于生成随机数 2. 采用注册机根据特征数字生成一个 24 位注册码 -- 相当于伪随机数生成器, 输出长度自己定, 最后用一个格式化函数,将随机数映射到 ASCII 字符集合 3. 用户输入注册码注册成功 假设客户很喜欢您的软件, 也假设他没有破解, 他需要通过以下方式向您取得注册码: (1).如果他能上网, 他需要把机器码用 Email 发给您; (2).如果他不能上网, 他可以把机器码用手机短信的方式发给您. (3).如果他没有手机, 他可以带着机器码然后坐火车到您的办公室想您要一个注册码. --第 3 条只是为了让您看帖子的时候别太枯燥了, 抱歉. 现在, 您拿到了客户的机器码后, 如果您同时也收到了他汇的钱, 呵呵, 好像给软件加密就是为了要钱吧? 那么您就可以用客户的机器 码生成一个唯一的注册码再用同样的方式给用户, 最后, 用户输入注册码即可! 需要强调的是客户机器的硬件信息获取方式是有很多种选择的. 这里我们选择最放心的两个硬件: CUP 的序列号和硬盘的卷标号. 好了, 下面您就可以一步一步制作一款软件注册机了. 步骤一: 获得 CUP 序列号和硬盘序列号的实现代码如下: Java 代码 #region 获取 cpu 的序列号 public string getCpu() { string strCpu = null; ManagementClass myCpu = new ManagementClass("win32_Processor"); ManagementObjectCollection myCpuConnection = myCpu.GetInstances(); foreach( ManagementObject myObject in myCpuConnection) { strCpu = myObject.Properties["Processorid"].Value.ToString(); break; } return strCpu; } #endregion #region 获取 cpu 的序列号 public string getCpu() { string strCpu = null; ManagementClass myCpu = new ManagementClass("win32_Processor"); ManagementObjectCollection myCpuConnection = myCpu.GetInstances(); foreach( ManagementObject myObject in myCpuConnection) { strCpu = myObject.Properties["Processorid"].Value.ToString(); break; } return strCpu; } #endregion Java 代码 #region 获取设备硬盘的卷标号 public string GetDiskVolumeSerialNumber() { ManagementClass mc = new ManagementClass("Wi...