C#实现生成mac地址与IP地址注册码的两种方法
本文实例讲述了C#实现生成mac地址与IP地址注册码的两种方法,分享给大家供大家参考之用。具体方法如下:
方法一:
usingSystem; usingSystem.Management; usingSystem.Security.Cryptography; usingSystem.IO; usingSystem.Collections.Generic; usingSystem.Text; namespacexingming_reg { classProgram { staticvoidMain(string[]args) { boolsucsess=false; stringcomputerbit=""; regmutoureg=newregmutou(); computerbit=reg.getcomputerbit("X"); sucsess=reg.regmutousoft(computerbit,"xinmin","xinmin.usr"); Console.WriteLine(sucsess); Console.ReadLine(); } } internalclassregmutou { //Methods publicstringGetBIOSSerialNumber() { try { ManagementObjectSearchersearcher=newManagementObjectSearcher("Select*FromWin32_BIOS"); stringstr=""; foreach(ManagementObjectobj2insearcher.Get()) { str=obj2["SerialNumber"].ToString().Trim(); } returnstr; } catch { return""; } } publicstringgetcomputerbit(stringsoftname) { stringcpuID=this.GetCpuID(); stringbIOSSerialNumber=this.GetBIOSSerialNumber(); stringhardDiskSerialNumber=this.GetHardDiskSerialNumber(); stringnetCardMACAddress=this.GetNetCardMACAddress(); if(cpuID!="") { MD5md=newMD5CryptoServiceProvider(); cpuID=BitConverter.ToString(md.ComputeHash(Encoding.Default.GetBytes(cpuID))).Replace("-","").ToUpper().Substring(8,0x10); return(softname+"C"+cpuID); } if(bIOSSerialNumber!="") { MD5md2=newMD5CryptoServiceProvider(); bIOSSerialNumber=BitConverter.ToString(md2.ComputeHash(Encoding.Default.GetBytes(bIOSSerialNumber))).Replace("-","").ToUpper().Substring(8,0x10); return(softname+"B"+bIOSSerialNumber); } if(hardDiskSerialNumber!="") { MD5md3=newMD5CryptoServiceProvider(); hardDiskSerialNumber=BitConverter.ToString(md3.ComputeHash(Encoding.Default.GetBytes(hardDiskSerialNumber))).Replace("-","").ToUpper().Substring(8,0x10); return(softname+"H"+hardDiskSerialNumber); } if(netCardMACAddress!="") { MD5md4=newMD5CryptoServiceProvider(); netCardMACAddress=BitConverter.ToString(md4.ComputeHash(Encoding.Default.GetBytes(netCardMACAddress))).Replace("-","").ToUpper().Substring(8,0x10); return(softname+"N"+netCardMACAddress); } return(softname+"WF53A419DB238BBAD"); } publicstringGetCpuID() { try { ManagementObjectCollectioninstances=newManagementClass("Win32_Processor").GetInstances(); stringstr=null; foreach(ManagementObjectobj2ininstances) { str=obj2.Properties["ProcessorId"].Value.ToString(); break; } returnstr; } catch { return""; } } publicstringGetHardDiskSerialNumber() { try { ManagementObjectSearchersearcher=newManagementObjectSearcher("SELECT*FROMWin32_PhysicalMedia"); stringstr=""; foreach(ManagementObjectobj2insearcher.Get()) { str=obj2["SerialNumber"].ToString().Trim(); break; } returnstr; } catch { return""; } } publicstringGetNetCardMACAddress() { try { ManagementObjectSearchersearcher=newManagementObjectSearcher("SELECT*FROMWin32_NetworkAdapterWHERE((MACAddressIsNotNULL)AND(Manufacturer<>'Microsoft'))"); stringstr=""; foreach(ManagementObjectobj2insearcher.Get()) { str=obj2["MACAddress"].ToString().Trim(); } returnstr; } catch { return""; } } publicboolregmutousoft(stringcomputerbit,stringsoftname,stringfilename) { boolflag=true; stringstr=""; SHA1sha=newSHA1CryptoServiceProvider(); str=BitConverter.ToString(sha.ComputeHash(Encoding.Default.GetBytes(softname))).Replace("-","").ToUpper(); //if(!File.Exists(filename)) //{ //flag=false; //Streamstream=File.Open(filename,FileMode.OpenOrCreate); //StreamWriterwriter=newStreamWriter(stream); //writer.WriteLine(computerbit); //writer.Close(); //stream.Close(); //returnflag; //} //Streamstream2=File.Open(filename,FileMode.Open); //StreamReaderreader=newStreamReader(stream2); //stringstr2=""; stringstr3=computerbit; //while((str2=reader.ReadLine())!=null) //{ //str3=str2; //} //reader.Close(); //stream2.Close(); //if(str3.Length!=0x18) //{ ////returnfalse; //} SHA1sha2=newSHA1CryptoServiceProvider(); stringstr4=BitConverter.ToString(sha2.ComputeHash(Encoding.Default.GetBytes(computerbit))).Replace("-","").ToUpper(); stringstr5=""; for(inti=0;i<str4.Length;i++) { if((i%2)==1) { str5=str5+str4[i]; } } stringstr6=""; for(intj=0;j<str.Length;j++) { if((j%2)==0) { str6=str6+str[j]; } } int[]numArray=newint[20]; for(intk=0;k<20;k++) { numArray[k]=str6[k]+str5[k]; numArray[k]=numArray[k]%0x24; } stringstr7=""; for(intm=0;m<20;m++) { if((m>0)&&((m%4)==0)) { str7=str7+"-"; } str7=str7+"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[numArray[m]]; } if(str3==str7) { flag=true; } Console.WriteLine("机器码:"+str3); Console.WriteLine("注册码:"+str7); returnflag; } } }
方法二:
usingSystem.Management; //Win32_NetworkAdapterConfiguration是WMI数据库中用来存放网络设备的信息表 ManagementObjectSearcherquery=newManagementObjectSearcher("SELECT*FROMWin32_NetworkAdapterConfigurationWHEREIPEnabled='TRUE'"); //ManagementObjectCollection对象用来存放查询结果 ManagementObjectCollectionqueryCollection=query.Get(); foreach(ManagementObjectmoinqueryCollection) { Console.WriteLine("NetworkCard:{0}",mo["Description"]); Console.WriteLine("MACAddress:{0}",mo["MACAddress"]); //addresses,subnets和defaultgateways值都是可以包含多个值得数组. //为了适应这种情况,为了适应这种情况,用户必须把结果分配到一个字符串数组, //并再一次用foreach语句通过该字符串数组 string[]addresses=(string[])mo["IPAddress"]; string[]subnets=(string[])mo["IPSubnet"]; string[]defaultgateways=(string[])mo["DefaultIPGateway"]; //任何一个接口都可能有多个IP地址 foreach(stringipaddressinaddresses) { Console.WriteLine("IPAddress:{0}",ipaddress); } foreach(stringsubnetinsubnets) { Console.WriteLine("SubnetMask:{0}",subnet); } foreach(stringdefaultgatewayindefaultgateways) { Console.WriteLine("Gateway:{0}",defaultgateway); } Console.WriteLine(); }
希望本文所述对大家的C#程序设计有所帮助。