做个计算器--实现一机一码
上一篇文章我们讲解了实现注册码的原理,以及实现了注册机生成注册码。这篇文章我们将完成计算器注册代码的实现,和复制功能的实现。零、实现注册在实现代码前我先简单说一下注册的思路,当我们点击注册按钮时,会先拿到输入的注册码,然后程序会根据机器码生成注册码,接着用输入的注册码和生成的注册码进行对比,如果一样就跳转到计算器窗体,反之弹出提示框。代码实现如下:private void Registered_b
上一篇文章我们讲解了实现注册码的原理,以及实现了注册机生成注册码。这篇文章我们将完成计算器注册代码的实现,和复制功能的实现。
零、实现注册
在实现代码前我先简单说一下注册的思路,当我们点击注册按钮时,会先拿到输入的注册码,然后程序会根据机器码生成注册码,接着用输入的注册码和生成的注册码进行对比,如果一样就跳转到计算器窗体,反之弹出提示框。代码实现如下:
private void Registered_button_Click(object sender, EventArgs e)
{
//1.获取注册码
string registrationCode = RegistrationCode_TextBox.Text;
//2.根据机器码生成注册码
string machineCode = MachineCode_TextBox.Text;
machineCode = $"miao{machineCode}shu";
string md5Str = MD5(machineCode);
md5Str = MD5(md5Str);
md5Str = md5Str.Replace("-", "");
//3.对比填入的注册码和生成的注册码
if (registrationCode == md5Str)
{
//3.1.如果注册码一样跳转到计算器窗体
this.DialogResult = DialogResult.OK;
}
else
{
//3.2.如果注册码不一样则弹出提示框
MessageBox.Show("注册码不正确!");
}
}
private static string MD5(string str)
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] bytes = Encoding.UTF8.GetBytes(str);
string md5Str = BitConverter.ToString(md5.ComputeHash(bytes));
return md5Str;
}
我们运行注册机程序和计算器程序,并生用生成的注册码注册我们的计算器程序,这时就可以正常进入到计算器窗体,但是当你关掉程序再次运行时还是会弹出注册窗体,这是因为我们的计算器程序并不知道我们已经注册了,那么我们应该如何让程序知道我们已经注册了呢?其实只需要把注册码保存在程序的运行目录下,然后每次运行时都会先读取保存的注册码,并对注册码进行校验,校验通过后就直接显示计算器窗体,反之显示注册窗体。
将 Registered_button_Click 事件里的代码修改如下:
private void Registered_button_Click(object sender, EventArgs e)
{
//1.获取注册码
string registrationCode = RegistrationCode_TextBox.Text;
//2.根据机器码生成注册码
string machineCode = MachineCode_TextBox.Text;
machineCode = $"miao{machineCode}shu";
string md5Str = MD5(machineCode);
md5Str = MD5(md5Str);
md5Str = md5Str.Replace("-", "");
//3.对比填入的注册码和生成的注册码
if (registrationCode == md5Str)
{
//3.1.如果注册码一样跳转到计算器界面
//3.2.保存注册码
File.WriteAllText("system.ini", registrationCode);
this.DialogResult = DialogResult.OK;
}
else
{
//3.2.如果注册码不一样则弹出提示框
MessageBox.Show("注册码不正确!");
}
}
Program 修改如下:
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if (File.Exists("system.ini"))
{
//1.读取system.ini文件中的注册码
string registrationCode = File.ReadAllText("system.ini");
//2.生成注册码
string machineCode = MachineCode();
machineCode = $"miao{machineCode}shu";
string md5Str = MD5(machineCode);
md5Str = MD5(md5Str);
md5Str = md5Str.Replace("-", "");
//3.判断注册码是否一致
if (registrationCode == md5Str)
{
Application.Run(new MainForm());
return;
}
}
//先显示窗体Registerd
Registered r = new Registered();
if (r.ShowDialog() == DialogResult.OK)//当窗体Registerd关闭时再打开MainForm船体
{
Application.Run(new MainForm());
}
}
private static string MD5(string str)
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] bytes = Encoding.UTF8.GetBytes(str);
string md5Str = BitConverter.ToString(md5.ComputeHash(bytes));
return md5Str;
}
private static string MachineCode()
{
//获取硬件信息
string cpu = HardwareInformation.Get("Win32_Processor");
string baseBoard = HardwareInformation.Get("Win32_BaseBoard");
string bois = HardwareInformation.Get("Win32_BIOS");
string diskDrive = HardwareInformation.Get("Win32_PhysicalMedia");
//生成机器码
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
string inf = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(cpu + baseBoard + bois + diskDrive)), 4, 8);
return inf;
}
}
一、复制功能
到目前为止我们已经实现了注册功能和生成注册码的功能,下面我们来实现剩下的一个功能:复制。我们只需要在复制按钮的 click 事件中调用 Clipboard.SetText 即可。
注册机的复制按钮代码:
private void Copy_Button_Click(object sender, EventArgs e)
{
Clipboard.SetText(RegistrationCode_TextBox.Text);
MessageBox.Show("注册码复制完成");
}
计算器的复制按钮:
private void Copy_Button_Click(object sender, EventArgs e)
{
Clipboard.SetText(MachineCode_TextBox.Text);
MessageBox.Show("机器码复制完成");
}
二、总结
本篇文章是这个阶段的最后一篇文章,主要讲解了如何实现软件的注册功能,软件的注册功能是最简单的防破解功能。从下一篇文章开始我们正式进入防破解的阶段。
Tip:代码下载地址,
注册机代码:https://gitee.com/miaoshu_studio/RegisterMachine.git CopyTheRegistrationCode 分支
计算器代码:https://gitee.com/miaoshu_studio/calculator.git
RealizeRegistration 分支

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)