做个计算器--生成注册码
本篇文章将实现注册机生成注册码,首先讲解 MD5 的原理,接着通过代码的形式来实现生成注册码。
零、MD5 原理
0.1 散列函数
散列函数主要用于校验数据的完整性,通过散列函数可以创建消息的数字指纹,消息接收方校验消息的哈希值来验证消息的完整性,防止消息被篡改。散列函数具有如下特点:
- 运算过程不可逆,具有单向性;
- 不同的消息具有不同的散列值,不存在相同的散列值;
- 对消息长度无限制。
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 分支
做个计算器--生成注册码相关推荐
- IntelliJ IDEA 生成注册码源程序
转发请注明出处 http://xuantan.iteye.com/admin/blogs/2167098 IntelliJ IDEA14 已经发布一段时间了,突然心血来潮想体验下,于是乎下载了安装程序 ...
- Kettle使用_17 计算器生成时间维度数据
Kettle使用_17 计算器生成时间维度数据 需求: 通过Kettle的组件自动生成时间维的数据. 解决方法:结合增加序列.计算器.选择字段等组件解决,这里主要是通过计算器里的支持的计算类型来实现的 ...
- 用python制作二维码_用python做一个可视化生成二维码的工具
用python做一个可视化生成二维码的工具 环境 pip install gooey pip install MyQR 源代码 from gooey import GooeyParser,Gooey ...
- java实现计算器的退格功能_帮忙看下这个java做的计算器为什么实现不了退格和清零功能,3q...
已结贴√ 问题点数:5 回复次数:1 帮忙看下这个java做的计算器为什么实现不了退格和清零功能,3q import java.awt.*; import java.awt.event.*; publ ...
- Myeclipse2018注册工具无法生成注册码解决方案
Myeclipse2018注册工具无法生成注册码解决方案 根本问题就是jdk版本过高,导致注册工具不能识别,另外需要计算机安装上jdk1.8. 注册详细步骤不在赘述,以上为出现问题的注册器版本. 查看 ...
- 用计算机的简便方法,和孩子一起做个计算器软件,真的是太简单啦!
原标题:和孩子一起做个计算器软件,真的是太简单啦! 计算器一直是我们生活中很常见的一个工具,可以快速准确的为我们提供数学计算的结果!早已成为了人们生活中不可缺少的工具. 计算工具的发展 数学计算工具已 ...
- 如何用pytorch做文本摘要生成任务(加载数据集、T5 模型参数、微调、保存和测试模型,以及ROUGE分数计算)
摘要:如何使用 Pytorch(或Pytorchlightning) 和 huggingface Transformers 做文本摘要生成任务,包括数据集的加载.模型的加载.模型的微调.模型的验证.模 ...
- php+rsa生成签名sign,PHP 做 RSA 签名 生成订单(支付宝例子)
/组合签名 $a=time(); $b=substr($a, 1); //生成随机订单号 $orderid= $b.mt_rand(10000,99999); //合作身份者id,以2088开头的16 ...
- 做一个计算器_2019年初级会计考试考生能不能带计算器?现在统一回复!
初级会计职称考试越来越近了,不少考生已经开始刷题,其中做计算题谁也逃不掉,而且分值比例也较高,有人就问我:初级考试能带计算器吗? 说到计算,大部分人觉得心算手算有点浪回复时间,而且19年初级会计考试采 ...
最新文章
- 解决MYSQL错误:ERROR 1040 (08004): Too many connections
- 利用Azure Backup备份和恢复虚拟机(2)
- Android实现系统ROOT, 并能赋予app root权限
- 吴恩达机器学习作业思路整理
- 基于SIMULINK的六足机器人仿真
- python 论坛模板_python模板 - PH的个人空间 - OSCHINA - 中文开源技术交流社区
- 特别慢_这款“爱豆”很特别,它带你重温旧时光,体验慢生活的时代
- matplotlib+numpy绘制二维条形直方图
- 开源开放的知识图谱工具和数据生态
- The NVIDIA driver on your system is too old (found version 9000).
- 国基北盛—云计算容器云pass(2.4)平台搭建
- 【数字电路基础】——逻辑门电路
- 《论语别裁》读书笔记
- 《第五项修炼,学习型组织的艺术与实践》读书笔记
- android qq红点,手机QQ的拖动红点消除红点功能是怎么想出来的?
- 本地差分隐私 随机响应_大数据时代下的隐私保护
- js中foreach有三种写法,你知道吗
- 无线点餐系统、在线点餐系统/在线订餐系统的设计与实现
- mcjava盗版联机_MC联机教程
- 正则的应用--读取本地文件1--例如豆瓣-codecs