机器码获取生成注册码可以自己根据获取到的硬盘序列号和网卡MAC地址进行一定的加密算法生成,唯一的机器码.给自己的软件制作注册码从今天起,您开发的的任何软件如果您愿意都可以为之加密--为您的软件制作一款注册机!当您看完这篇文章时,您就可以理直气壮的告诉您的用户:喂,想用我的软件是吧?掏钱!.呵呵,这当然只是给自己壮胆的话,现在连万能注册机都有了,人家还怕啥?不过只要您想想微软,人家再牛B的加密技术都会被国人鄙视?但人家不也在中国大把大把的捞钱吗?OK,不扯了,我们进入正题.同一般的软件注册一样,我们这里的注册是这样进行的:1.首先根据用户的硬件信息生成24位的机器码--相当于种子,用于生成随机数2.采用注册机根据特征数字生成一个24位注册码--相当于伪随机数生成器,输出长度自己定,最后用一个格式化函数,将随机数映射到ASCII字符集合3.用户输入注册码注册成功假设客户很喜欢您的软件,也假设他没有破解,他需要通过以下方式向您取得注册码:(1).如果他能上网,他需要把机器码用Email发给您;(2).如果他不能上网,他可以把机器码用手机短信的方式发给您.(3).如果他没有手机,他可以带着机器码然后坐火车到您的办公室想您要一个注册码.--第3条只是为了让您看帖子的时候别太枯燥了,抱歉.现在,您拿到了客户的机器码后,如果您同时也收到了他汇的钱,呵呵,好像给软件加密就是为了要钱吧?那么您就可以用客户的机器码生成一个唯一的注册码再用同样的方式给用户,最后,用户输入注册码即可!需要强调的是客户机器的硬件信息获取方式是有很多种选择的.这里我们选择最放心的两个硬件:CUP的序列号和硬盘的卷标号.好了,下面您就可以一步一步制作一款软件注册机了.步骤一:获得CUP序列号和硬盘序列号的实现代码如下:Java代码#region获取cpu的序列号publicstringgetCpu(){stringstrCpu=null;ManagementClassmyCpu=newManagementClass(win32_Processor);ManagementObjectCollectionmyCpuConnection=myCpu.GetInstances();foreach(ManagementObjectmyObjectinmyCpuConnection){strCpu=myObject.Properties[Processorid].Value.ToString();break;}returnstrCpu;}#endregion#region获取cpu的序列号publicstringgetCpu(){stringstrCpu=null;ManagementClassmyCpu=newManagementClass(win32_Processor);ManagementObjectCollectionmyCpuConnection=myCpu.GetInstances();foreach(ManagementObjectmyObjectinmyCpuConnection){strCpu=myObject.Properties[Processorid].Value.ToString();break;}returnstrCpu;}#endregionJava代码#region获取设备硬盘的卷标号publicstringGetDiskVolumeSerialNumber(){ManagementClassmc=newManagementClass(Win32_NetworkAdapterConfiguration);ManagementObjectdisk=newManagementObject(win32_logicaldisk.deviceid=\d:\);disk.Get();returndisk.GetPropertyValue(VolumeSerialNumber).ToString();}#endregion#region获取设备硬盘的卷标号publicstringGetDiskVolumeSerialNumber(){ManagementClassmc=newManagementClass(Win32_NetworkAdapterConfiguration);ManagementObjectdisk=newManagementObject(win32_logicaldisk.deviceid=\d:\);disk.Get();returndisk.GetPropertyValue(VolumeSerialNumber).ToString();}#endregion步骤二:收集硬件信息生成机器码,代码如下:Java代码privatevoidbutton1_Click(objectsender,EventArgse){label2.Text=getCpu()+GetDiskVolumeSerialNumber();//获得24位Cpu和硬盘序列号string[]strid=newstring[24];for(inti=0;i24;i++)//把字符赋给数组{strid[i]=label2.Text.Substring(i,1);}label2.Text=;Randomrdid=newRandom();for(inti=0;i24;i++)//从数组随机抽取24个字符组成新的字符生成机器三{label2.Text+=strid[rdid.Next(0,24)];}}privatevoidbutton1_Click(objectsender,EventArgse){label2.Text=getCpu()+GetDiskVolumeSerialNumber();//获得24位Cpu和硬盘序列号string[]strid=newstring[24];for(inti=0;i24;i++)//把字符赋给数组{strid[i]=label2.Text.Substring(i,1);}label2.Text=;Randomrdid=newRandom();for(inti=0;i24;i++)//从数组随机抽取24个字符组成新的字符生成机器三{label2.Text+=strid[rdid.Next(0,24)];}}步骤三:使用机器码生成软件注册码,代码如下:Java代码publicint[]intCode=newint[127];//用于存密钥publicvoidsetIntCode()//给数组赋值个小于10的随机数{Randomra=newRandom();for(inti=1;iintCode.Length;i++){intCode[i]=ra.Next(0,9);}}publicint[]intNumber=newint[25];//用于存机器码的Ascii值publicchar[]Charcode=newchar[25];//存储机器码字//生成注册码privatevoidbutton2_Click(objectsender,EventArgse){if(label2.Text!=){setIntCode();//初始化127位数组for(inti=1;iCharcode.Length;i++)//把机器码存入数组中{Charcode[i]=Convert.ToChar(label2.Text.Substring(i-1,1));}//for(intj=1;jintNumber.Length;j++)//把字符的ASCII值存入一个整数组中。{intNumber[j]=intCode[Convert.ToInt32(Charcode[j])]+Convert.ToInt32(Charcode[j]);}stringstrAsciiName=null;//用于存储机器码for(intj=1;jintNumber.Length;j++){//MessageBox.Show((Convert.ToChar(intNumber[j])).ToString());if(intNumber[j]=48&&intNumber[j]=57)//判断字符ASCII值是否0-9之间{strAsciiName+=Convert.ToChar(intNumber[j]).ToString();}elseif(intNumber[j]=65&&intNumber[j]=90)//判断字符ASCII值是否A-Z之间{strAsciiName+=Convert.ToChar(intNumber[j]).ToString();}elseif(intNumber[j]=97&&intNumber[j]=122)//判断字符ASCII值是否a-z之间{strAsciiName+=Convert.ToChar(intNumber[j]).ToString();}else//判断字符ASCII值不在以上范围内{if(intNumber[j]122)//判断字符ASCII值是否大于z{strAsciiName+=Convert.ToChar(intNumber[j]-10).ToString();}else{strAsciiName+=Convert.ToChar(intNumber[j]-9).ToString();}}label3.Text=strAsciiName;//得到注册码}}else{MessageBox.Show(请选生成机器码,注册提示);}}publicint[]intCode=newint[127];//用于存密钥publicvoidsetIntCode()//给数组赋值个小于10的随机数{Randomra=newRandom();for(inti=1;iintCode.Length;i++){intCode[i]=ra.Next(0,9);}}publicint[]intNumber=newint[25];//用于存机器码的Ascii值publicchar[]Charcode=newchar[25];//存储机器码字//生成注册码privatevoidbutton2_Click(objectsender,EventArgse){if(label2.Text!=){setIntCode();//初始化127位数组for(inti=1;iCharcode.Length;i++)//把机器码存入数组中{Charcode[i]=Convert.ToChar(label2.Text.Substring(i-1,1));}//for(intj=1;jintNumber.Length;j++)//把字符的ASCII值存入一个整数组中。{intNumber[j]=intCode[Convert.ToInt32(Charcode[j])]+Convert.ToInt32(Charcode[j]);}stringstrAsciiName=null;//用于存储机器码for(intj=1;jintNumber.Length;j++){//MessageBox.Show((Convert.ToChar(intNumber[j])).ToString());if(intNumber[j]=48&&intNumber[j]=57)//判断字符ASCII值是否0-9之间{strAsciiName+=Convert.ToChar(intNumber[j]).ToString();}elseif(intNumber[j]=65&&intNumber[j]=90)//判断字符ASCII值是否A-Z之间{strAsciiName+=Convert.ToChar(intNumber[j]).ToString();}elseif(intNumber[j]=97&&intNumber[j]=122)//判断字符ASCII值是否a-z之间{str