文档详情

机器码生成注册码教程

桔****
实名认证
店铺
DOC
98KB
约8页
文档ID:466878742
机器码生成注册码教程_第1页
1/8

同一般的软件注册一样,我们这里的注册是这样进行的:1. 首先根据用户的硬件信息生成 24位的机器码--相当于种子,用于生成随机数2. 采用注册机根据特征数字生成一个 24位注册码--相当于伪随机数生成器,输出长度自己定,最后用一个格式化函数,将随机数 映射到ASCII字符集合3. 用户输入注册码注册成功假设客户很喜欢您的软件,也假设他没有破解,他需要通过以下方式向您取得注册 码:(1) .如果他能上网,他需要把机器码用Email发给您;(2) .如果他不能上网,他可以把机器码用短信的方式发给您 .(3) .如果他没有,他可以带着机器码然后坐火车到您的办公室想您要一个注册 码.--第3条只是为了让您看帖子的时候别太枯燥了 ,抱歉.现在,您拿到了客户的机器码后,如果您同时也收到了他汇的钱,呵呵,好像给软 件加密就是为了要钱吧?那么您就可以用客户的机器码生成一个唯一的注册码再用同样的方式给用户 ,最后,用户输入注册码即可!需要强调的是客户机器的硬件信息获取方式是有很多种选择的 .这里我们选择最放心的两个硬件:CUP的序列号和硬盘的卷标号.好了, 下面您就可以一步一步制作一款软件注册机了 .步骤一:获得CUP序列号和硬盘序列号的实现代码如下 :Java代码#region 获取cpu的序列号 public stri ng getCpu(){stri ng strCpu = nu II;Man ageme ntClass myCpu = newMan ageme ntClass("wi n32_Processor");Man ageme ntObjectCollecti on myCpuC onn ectio n 二 myCpu.Get In sta nces();foreach( Man ageme ntObject myObject in myCpuC onnection){strCpu = myObject.Properties["Processorid"].Value.ToStri ng();break;}return strCpu;}#en dregi on#region 获取cpu的序列号 public stri ng getCpu(){stri ng strCpu = nu ll;Man ageme ntClass myCpu = newMan ageme ntClass("wi n32_Processor");Man ageme ntObjectCollecti on myCpuC onn ectio n 二 myCpu.Get In sta nces();foreach( Man ageme ntObject myObject in myCpuC onnection){strCpu = myObject.Properties["Processorid"].Value.ToStri ng();break;}return strCpu;}#en dregi onJava代码#regi on获取设备硬盘的卷标号public stri ng GetDiskVolumeSerialNumber(){Man ageme ntClass mc = newMan ageme ntClass("Wi n32_NetworkAdapterCo nfiguratio n");Man ageme ntObject disk = newMan ageme ntObject("wi n32」o gicaldisk.deviceid=\"d:\"");disk.Get();return disk.GetPropertyValue("VolumeSerialNumber").ToStri ng(); }#en dregi on#regi on获取设备硬盘的卷标号public stri ng GetDiskVolumeSerialNumber(){Man ageme ntClass mc = newMan ageme ntClass("Wi n32_NetworkAdapterCo nfiguratio n");Man ageme ntObject disk = newMan ageme ntObject("wi n32」o gicaldisk.deviceid=\"d:\"");disk.Get();return disk.GetPropertyValue("VolumeSerialNumber").ToStri ng(); }#en dregi on步骤二:收集硬件信息生成机器码,代码如下:Java代码{获得24位Cpuprivate void butt on 1_Click(object sen der, Eve ntArgs e)label2.Text = getCpu() + GetDiskVolumeSerialNumber();〃 和硬盘序列号string[] strid = new string[24];for (int i = 0; i < 24; i++)〃 把字符赋给数组{strid[i] = label2.Text.Substri ng(i, 1);}label2.Text ="";Ran dom rdid = new Ran dom();for (int i = 0; i < 24; i++)〃 从数组随机抽取24个字符组成新的字符生成机器{ label2.Text += strid[rdid.Next(0, 24)];}}private void butt on 1_Click(object sen der, Eve ntArgs e) {label2.Text = getCpu() + GetDiskVolumeSerialNumber();〃 获得 24 位 Cpu和硬盘序列号string[] strid = new string[24];for (int i = 0; i < 24; i++)// 把字符赋给数组{strid[i] = label2.Text.Substri ng(i, 1);}label2.Text ="";Ran dom rdid = new Ran dom();for (int i = 0; i < 24; i++)// 从数组随机抽取24个字符组成新的字符生成机器{label2.Text += strid[rdid.Next(0, 24)];}}步骤三:使用机器码生成软件注册码,代码如下:Java代码public in t[] in tCode = new in t[127];〃 用于存密钥public void set In tCode()〃 给数组赋值个小于10的随机数{Ran dom ra = new Ran dom();for (int i = 1; i < in tCode.Le ngth;i++ ){in tCode[i] = ra.Next(0, 9);}}public int[] intNumber = new int[25];〃 用于存机器码的 Ascii 值public char[] Charcode = new char[25];〃 存储机器码字//生成注册码private void butt on 2_Click(object sen der, Eve ntArgs e) {if (label2.Text !=""){set In tCode();〃初始化127位数组for (int i = 1; i < Charcode.Le ngth; i++)〃 把机器码存入数组中{Charcode[i] = Convert.ToChar(label2.Text.Substring(i - 1,1));}〃for (int j = 1; j < intNumber.Length; j++)〃 把字符的 ASCII 值存入一个整数组中。

{in tNumberj = in tCode[Co nvert.ToI nt32(Charcode[j])] +Co nvert.ToI nt32(Charcode[j]);}stri ng strAsciiName = n ull;〃 用于存储机器码for (int j = 1; j < in tNumber.Le ngth; j++){〃MessageBox.Show((Co nvert.ToChar(i ntNumber[j])).ToStri ng());if (intNumber[j] >= 48 && intNumber[j] <= 57)// 判断字符 ASCII 值是否 0 —9之间{strAsciiName +=Co nvert.ToChar(i ntNumber[j]).ToStri ng();}else if (intNumberj >= 65 && intNumberj <= 90)// 判断字符 ASCII 值是否A — Z之间{strAsciiName +=Co nvert.ToChar(i ntNumber[j]).ToStri ng();}else if (intNumber[j] >= 97 && intNumber[j] <= 122)// 判断字符 ASCII值是否a — z之间{strAsciiName +=Co nvert.ToChar(i ntNumber[j]).ToStri ng();}else〃判断字符ASCII值不在以上范围内{if (intNumber[j] > 122)// 判断字符 ASCII 值是否大于 z{strAsciiName += Convert.ToChar(intNumber[j]-10).ToStri ng();}else{strAsciiName += Convert.ToChar(intNumber[j]-9).ToStri ng();}}label3.Text = strAsciiName;// 得到注册码}}else{ MessageBox.Show(” 请选生成机器码",”注册提示");}}public in t[] in tCode = new in t[127];〃 用于存密钥public void set In tCode()〃 给数组赋值个小于10的随机数{Ran dom ra = new Ran dom();for (int i = 1; i < in tCode.Le ngth;i++ ){in tCode[i] = ra.Next(0, 9);}}public int[] intNumber = new int[25];〃 用于存机器码的 Ascii 值public char[] Charcode = new char[25];〃 存储机器码字//生成注册码private void butt on 2_Click(object sen der, Eve ntArgs e) {if (label2.Text !=""){set In tCode();//初始化127位数组for (int i = 1; i 。

下载提示
相似文档
正为您匹配相似的精品文档