机器码获取生成注册码.docx
- 文档编号:23230577
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:12
- 大小:17.23KB
机器码获取生成注册码.docx
《机器码获取生成注册码.docx》由会员分享,可在线阅读,更多相关《机器码获取生成注册码.docx(12页珍藏版)》请在冰豆网上搜索。
机器码获取生成注册码
机器码获取生成注册码
通过获取硬盘的物理序列号和网卡MAC地址,为您的程序提供了获取唯一的机器码,你可以根据此码,生成自己产品注册码,有效防止软件的盗版
可以自己根据获取到的硬盘序列号和网卡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;i<24;i++)//把字符赋给数组
{
strid[i]=label2.Text.Substring(i,1);
}
label2.Text="";
Randomrdid=newRandom();
for(inti=0;i<24;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;i<24;i++)//把字符赋给数组
{
strid[i]=label2.Text.Substring(i,1);
}
label2.Text="";
Randomrdid=newRandom();
for(inti=0;i<24;i++)//从数组随机抽取24个字符组成新的字符生成机器三
{
label2.Text+=strid[rdid.Next(0,24)];
}
}步骤三:
使用机器码生成软件注册码,代码如下:
Java代码
publicint[]intCode=newint[127];//用于存密钥
publicvoidsetIntCode()//给数组赋值个小于10的随机数
{
Randomra=newRandom();
for(inti=1;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;i { Charcode[i]=Convert.ToChar(label2.Text.Substring(i-1,1)); }// for(intj=1;j { intNumber[j]=intCode[Convert.ToInt32(Charcode[j])]+Convert.ToInt32(Charcode[j]); } stringstrAsciiName=null;//用于存储机器码 for(intj=1;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;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;i { Charcode[i]=Convert.ToChar(label2.Text.Substring(i-1,1)); }// for(intj=1;j { intNumber[j]=intCode[Convert.ToInt32(Charcode[j])]+Convert.ToInt32(Charcode[j]); } stringstrAsciiName=null;//用于存储机器码 for(intj=1;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[
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 机器码 获取 生成 注册码