为自己写的程序加一个注册功能吧。生成的机器号是根据CPU和硬盘号来的,根据自己的需求改成是否是随机生成。
代码直接粘贴到新建类覆盖原代码就能直接用了。
using
System;
using
System.Management;
using
System.Security.Cryptography;
using
System.Text;
namespace
RegisterClass
{
class
RegisterClass
{
//
步骤一: 获得CUP序列号和硬盘序列号的实现代码如下:
//
获得CPU的序列号
bool
Stupids =
true
;
bool
Cat =
false
;
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;
}
//
取得设备硬盘的卷标号
public
string
GetDiskVolumeSerialNumber()
{
ManagementClass mc
=
new
ManagementClass(
"
Win32_NetworkAdapterConfiguration
"
);
ManagementObject disk
=
new
ManagementObject(
"
win32_logicaldisk.deviceid=\"c:\"
"
);
disk.Get();
return
disk.GetPropertyValue(
"
VolumeSerialNumber
"
).ToString();
}
//
步骤二: 收集硬件信息生成机器码, 代码如下:
//
生成机器码
public
string
CreateCode()
{
string
temp = getCpu() + GetDiskVolumeSerialNumber();
//
获得24位Cpu和硬盘序列号
string
[] strid =
new
string
[
24
];
//
for
(
int
i =
0
; i <
24
; i++)
//
把字符赋给数组
{
strid[i]
= temp.Substring(i,
1
);
}
temp
=
""
;
//
Random rdid = new Random();
for
(
int
i =
0
; i <
24
; i++)
//
从数组随机抽取24个字符组成新的字符生成机器三
{
//
temp += strid[rdid.Next(0, 24)];
temp += strid[i+
3
>=
24
?
0
:i+
3
];
}
return
GetMd5(temp);
}
//
步骤三: 使用机器码生成软件注册码, 代码如下:
//
使用机器码生成注册码
public
int
[] intCode =
new
int
[
127
];
//
用于存密钥
public
void
setIntCode()
//
给数组赋值个小于10的随机数
{
//
Random ra = new Random();
//
for (int i = 1; i < intCode.Length;i++ )
//
{
//
intCode[i] = ra.Next(0, 9);
//
}
for
(
int
i =
1
; i < intCode.Length; i++
)
{
intCode[i]
= i +
3
>
9
?
0
: i +
3
;
}
}
public
int
[] intNumber =
new
int
[
25
];
//
用于存机器码的Ascii值
public
char
[] Charcode =
new
char
[
25
];
//
存储机器码字
//
生成注册码
public
string
GetCode(
string
code)
{
if
(code !=
""
)
{
//
把机器码存入数组中
setIntCode();
//
初始化127位数组
for
(
int
i =
1
; i < Charcode.Length; i++)
//
把机器码存入数组中
{
Charcode[i]
= Convert.ToChar(code.Substring(i -
1
,
1
));
}
//
for
(
int
j =
1
; j < intNumber.Length; j++)
//
把字符的ASCII值存入一个整数组中。
{
intNumber[j]
=
intCode[Convert.ToInt32(Charcode[j])]
+
Convert.ToInt32(Charcode[j]);
}
string
strAsciiName =
null
;
//
用于存储机器码
for
(
int
j =
1
; j < intNumber.Length; j++
)
{
//
MessageBox.Show((Convert.ToChar(intNumber[j])).ToString());
//
判断字符ASCII值是否0-9之间
if
(intNumber[j] >=
48
&& intNumber[j] <=
57
)
{
strAsciiName
+=
Convert.ToChar(intNumber[j]).ToString();
}
//
判断字符ASCII值是否A-Z之间
else
if
(intNumber[j] >=
65
&& intNumber[j] <=
90
)
{
strAsciiName
+=
Convert.ToChar(intNumber[j]).ToString();
}
//
判断字符ASCII值是否a-z之间
else
if
(intNumber[j] >=
97
&& intNumber[j] <=
122
)
{
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;
//
得到注册码
}
return
strAsciiName;
}
else
{
return
""
;
}
}
//
步骤四: 用户输入注册码注册软件, 演示代码如下:
//
注册
public
bool
RegistIt(
string
currentCode,
string
realCode)
{
if
(realCode !=
""
)
{
if
(currentCode.TrimEnd().Equals(realCode.TrimEnd()))
{
Microsoft.Win32.RegistryKey retkey
=
Microsoft.Win32.Registry.CurrentUser.
OpenSubKey(
"
software
"
,
true
).CreateSubKey(
"
StupidsCat
"
).
CreateSubKey(
"
StupidsCat.ini
"
).
CreateSubKey(currentCode.TrimEnd());
retkey.SetValue(
"
StupidsCat
"
,
"
BBC6D58D0953F027760A046D58D52786
"
);
retkey
=
Microsoft.Win32.Registry.LocalMachine.
OpenSubKey(
"
software
"
,
true
).CreateSubKey(
"
StupidsCat
"
).
CreateSubKey(
"
StupidsCat.ini
"
).
CreateSubKey(currentCode.TrimEnd());
retkey.SetValue(
"
StupidsCat
"
,
"
BBC6D58D0953F027760A046D58D52786
"
);
return
Stupids;
}
else
{
return
Cat;
}
}
else
{
return
Cat; }
}
public
bool
BoolRegist(
string
sn)
{
string
[] keynames;
bool
flag =
false
;
Microsoft.Win32.RegistryKey localRegKey
=
Microsoft.Win32.Registry.LocalMachine;
Microsoft.Win32.RegistryKey userRegKey
=
Microsoft.Win32.Registry.CurrentUser;
try
{
keynames
= localRegKey.OpenSubKey(
"
software\\StupidsCat\\StupidsCat.ini\\
"
+
GetMd5(sn)).GetValueNames();
foreach
(
string
name
in
keynames)
{
if
(name ==
"
StupidsCat
"
)
{
if
(localRegKey.OpenSubKey(
"
software\\StupidsCat\\StupidsCat.ini\\
"
+ GetMd5(sn)).GetValue(
"
StupidsCat
"
).ToString() ==
"
BBC6D58D0953F027760A046D58D52786
"
)
flag
=
true
;
}
}
keynames
= userRegKey.OpenSubKey(
"
software\\StupidsCat\\StupidsCat.ini\\
"
+
GetMd5(sn)).GetValueNames();
foreach
(
string
name
in
keynames)
{
if
(name ==
"
StupidsCat
"
)
{
if
(flag && userRegKey.OpenSubKey(
"
software\\StupidsCat\\StupidsCat.ini\\
"
+ GetMd5(sn)).GetValue(
"
StupidsCat
"
).ToString() ==
"
BBC6D58D0953F027760A046D58D52786
"
)
return
true
;
}
}
return
false
;
}
catch
{
return
false
;
}
finally
{
localRegKey.Close();
userRegKey.Close();
}
}
public
string
GetMd5(
object
text)
{
string
path =
text.ToString();
MD5CryptoServiceProvider MD5Pro
=
new
MD5CryptoServiceProvider();
Byte[] buffer
= Encoding.GetEncoding(
"
utf-8
"
).GetBytes(text.ToString());
Byte[] byteResult
=
MD5Pro.ComputeHash(buffer);
string
md5result = BitConverter.ToString(byteResult).Replace(
"
-
"
,
""
);
return
md5result;
}
}
}

