Vikot106's Blog.

程序:产品注册与验证工具

字数统计: 942阅读时长: 4 min
2019/05/23 Share

Java课程的小练习 只是随便做做看

工具介绍

  • 主界面截图

snap1

  • 该工具使用机器MAC地址作为机器码,具有唯一性避免重复。
  • 该工具自动获取计算机名作为用户名。
  • 注册码通过自定义算法计算。
  • 该工具具有激活状态保存与启动检查功能,若在激活过后重新运行软件仍会保持已激活的状态。
  • 该工具具有试用功能,以试用模式运行软件则会在应用窗口标题显示“(试用版)”。

snap4

snap2

snap3

使用教程

  1. 运行软件,弹出【注册产品】窗口,点击“购买软件”可通过指定方式上传机器码并取得注册码。(用户名默认为当前计算机用户的用户名,可以修改)
  2. 点击注册验证注册码,若输入错误会提示注册失败对话框,若注册成功会在弹出成功对话框后跳转至软件窗口(标题为已注册)。(软件窗口会显示用户名和注册码信息)
  3. 重新运行软件会先验证软件是否已注册,若已注册则直接进入软件窗口(标题为已注册)。(删除根目录下的“Code”文件会删除注册信息)
  4. 在软件【注册产品】窗口点击“使用软件”后将直接跳转至软件窗口(标题为未注册),且注册码处信息为“试用版”。

技术简述

类与模块

  1. AppliFrame —— 软件窗体
  2. getMAC —— 获得计算机MAC地址
  3. getUID —— 获得计算机名
  4. JudgeReg —— 判断是否已注册(入口)
  5. KeyVerification —— 注册码计算验证
  6. RegisterFrame —— 软件窗体

注册码的计算

  • 当前注册码的算法示例为:

    0-S8-61-4-79-5A [识别码]—->[提取] 8614795 [十进制]—->[十六进制] 83738b

  • 实现代码:

KeyVerification
1
2
3
4
5
6
7
8
9
10
11
12
13
MAC = MAC.trim();
String StrCode = "";
String CodeHex = "null";
if (MAC != null && !"".equals(MAC)) {
for (int i = 0; i < MAC.length(); i++) {
if (MAC.charAt(i) >= 48 && MAC.charAt(i) <= 57) {
StrCode += MAC.charAt(i);
}
}
int Code = Integer.parseInt(StrCode);
// 将其转换为十六进制并输出
CodeHex = Integer.toHexString(Code);
System.out.println(MAC +" [识别码]---->[提取] " + Code + " [十进制]---->[十六进制] " + CodeHex);

MAC地址的获取

  • 实现代码
getMAC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
InetAddress adress = InetAddress.getLocalHost();
NetworkInterface net = NetworkInterface.getByInetAddress(adress);
byte[] macBytes = net.getHardwareAddress();
String LocalMAC = transBytesToStr(macBytes);
public static String transBytesToStr(byte[] bytes){
StringBuffer buffer = new StringBuffer();
for(int i = 0; i < bytes.length; i++){
if(i != 0)
buffer.append("-");
//bytes[i]&0xff将有符号byte数值转换为32位有符号整数,其中高24位为0,低8位为byte[i]
int intMac = bytes[i]&0xff;
//toHexString函数将整数类型转换为无符号16进制数字
String str = Integer.toHexString(intMac);
if(str.length() == 0){
buffer.append("0");
}
buffer.append(str);
}
return buffer.toString().toUpperCase();
}

计算机名的获取

  • 实现代码:
getUID
1
2
3
4
5
String UID = "未获取到计算机名,请手动填写。";
String computerName = System.getenv().get("COMPUTERNAME");
if (computerName != "" && computerName != null) {
UID = computerName;
}

注册码的验证

  • 实现代码:
JudgeReg
1
2
3
4
5
6
7
if (KeyVerification.VerificationMAC(Code)) {
JOptionPane.showMessageDialog(null, "该软件已授权给: " + UID + " !", "提示",
JOptionPane.INFORMATION_MESSAGE);
new AppliFrame("欢迎使用XXXXXX软件,注册给:" + UID).setVisible(true);// 新窗口显示
} else {
new RegisterFrame("注册产品");
}

文件的写入与读取

  • 实现代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//文件写入
FileWriter creatMAC = new FileWriter("MachineCode");
File writeMAC = new File("MachineCode");
PrintStream ps = new PrintStream(new FileOutputStream(writeMAC));
ps.println(LocalMAC);// 往文件里写入字符串
creatMAC.close();
//文件读取
File CodeFile = new File("Code");
CodeFile.createNewFile();
FileReader CodeReader = new FileReader("Code");
LineNumberReader Creader = new LineNumberReader(CodeReader);
String Code = "";
Code = Creader.readLine();
Creader.close();
CodeReader.close();

窗体的建立

  • 这个太复杂了就不列出代码了
  • 使用包 java.awt.*

制作时间

2019-5-22 — 2019-5-23

开发环境

Eclipse

CATALOG
  1. 1. 工具介绍
  2. 2. 使用教程
  3. 3. 技术简述
    1. 3.1. 类与模块
    2. 3.2. 注册码的计算
    3. 3.3. MAC地址的获取
    4. 3.4. 计算机名的获取
    5. 3.5. 注册码的验证
    6. 3.6. 文件的写入与读取
    7. 3.7. 窗体的建立
  4. 4. 制作时间
    1. 4.1. 开发环境