做个计算器--生成注册码

简介: 做个计算器--生成注册码

本篇文章将实现注册机生成注册码,首先讲解 MD5 的原理,接着通过代码的形式来实现生成注册码。


零、MD5 原理

0.1 散列函数

散列函数主要用于校验数据的完整性,通过散列函数可以创建消息的数字指纹,消息接收方校验消息的哈希值来验证消息的完整性,防止消息被篡改。散列函数具有如下特点:


  1. 运算过程不可逆,具有单向性;
  2. 不同的消息具有不同的散列值,不存在相同的散列值;
  3. 对消息长度无限制。

0.2 MD5 算法原理

MD5 算法是典型的摘要算法,它是由 MD4、MD3 和 MD2 发展而来。原理是接收一个任意长度的消息生成一个 128 位的消息摘要,这个 128 位的消息摘要转换成十六进制就是是一个 32 字节长度的字符串,因此平时见到的 MD5 字符串都是 32 位的十六进制。对 MD5 算法简要的叙述为,MD5 以 512 位分组来处理输入的信息,每一分组又被划分为 16 个 32 位的子分组,经过了一系列的处理后,算法的输出由四个 32 位分组组成,将这四个 32 位分组级联后将生成一个 128 位散列值。因为本篇主要是讲解生成注册码的方法,因此 MD5 具体的原理我在这里就不细说了。


一、生成注册码

1.1 实现思路

我们先来看一下实现思路,在获取到机器码后,将机器码复制到注册机上,当我们点击生成注册码按钮时,注册机会首先读取输入的机器码,然后在机器码的开头和结尾分别拼接上两个不同的字符串(暂且将这两个字符串叫做盐),加盐的目的就是为了防止计算器软件的使用者在猜测到我们使用的是 MD5 加密来生成机器码的情况下,自己生成注册码注册我们的软件。接着把加密信息,然后将加密后的信息再次进行 MD5 加密并去掉 MD5 字符串中的横线。这样就生成了我们要的注册码。


1.2 代码实现

按照上面的思路我们来实现一下。首先我们需要引入 System.Security.Cryptography 命名空间,它提供了 MD5 加密算法。

using System;
using System.Text;
using System.Windows.Forms;
//引入 System.Security.Cryptography
using System.Security.Cryptography;
namespace RegisterMachine
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Registered_button_Click(object sender, EventArgs e)
        {
            //读取机器码
            string machineCode = MachineCode_TextBox.Text;
            //在机器码的开头和结尾分别拼接上两个不同的盐(这里的盐是固定值)
            machineCode = $"miao{machineCode}shu";
            //加密信息
            string md5Str = MD5(machineCode);
            //再次加密信息
            md5Str = MD5(md5Str);
            //去除md5字符串中的横线
            md5Str = md5Str.Replace("-", "");
            RegistrationCode_TextBox.Text = md5Str;
        }
        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;
        }
    }
}

二、总结

文章简单讲解了 MD5 加密的原理,之后又以 MD5 为基础编写了实现注册码生成。在下一篇文章中我们将这篇文章的基础上实现一机一码。


Tip 本篇文章下载代码下载地址:https://gitee.com/miaoshu_studio/RegisterMachine.git 选择

RegistrationCode 分支


目录
相关文章
|
iOS开发 MacOS Windows
|
10月前
|
Java
从计算器小例子的总结思考
从计算器小例子的总结思考
93 0
|
8月前
一个计算器器脚本
一个计算器器脚本
30 1
计算器(简易版)
另一种是利用转移表的方式来写,将各个函数的地址存放在一个函数指针数组里面,当要使用函数时,就直接调用指针即可,可以改观上面的美观(上面的代码有很多重复的,太挫了)
71 0
|
Python
python实现简单的计算器 带界面
python实现简单的计算器 带界面
196 0
python实现简单的计算器 带界面
做个计算器--制作计算器
做个计算器--制作计算器
211 0
做个计算器--制作计算器
|
算法
入门--什么是机器码、注册机和注册码
入门--什么是机器码、注册机和注册码
847 0
做个计算器--获取硬件信息
做个计算器--获取硬件信息
202 0
做个计算器--获取硬件信息
|
Windows 容器
使用 fyne 编写一个计算器程序
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 简介在上一篇文章中,我们介绍了一个 Go 的高颜值 GUI 库fyne。本文接着上一篇,介绍如何使用fyne编写一个简单的计算器程序。
使用 fyne 编写一个计算器程序