前言
使用Electron开发客户端的时候,我们可以做在线激活,也可以做本地激活,这里我们就先实现一个本地激活的方式。
获取MAC地址
安装依赖
1 | npm install getmac --save |
代码
1 | const getMac = require("getmac").default; |
获取到的结果如下
本机mac地址: 00:ff:63:f9:b4:ef
加解密
AES加解密
添加依赖
1 | npm install crypto-js --save |
aes_ecb.js
1 | const CryptoJS = require("crypto-js"); |
调用
1 | import {encStr} from "./utils/aes_ecb"; |
MD5加密
方式1
md5.js
1 | const CryptoJS = require("crypto-js"); |
使用
1 | import { md5 } from "./utils/md5"; |
方式2
安装md5加密
1 | npm install md5-node --save |
测试
1 | const md5 = require("md5-node"); |
激活码算法
预激活码
预激活码是用户提供的,用户发送给激活人员,生成激活码后再把激活码发给用户。
因为没有云服务器,所以我们必须用户能提供必要的信息,这里主要需要用户的MAC地址
和激活的天数
1 | const getMac = require("getmac").default; |
可以看到结果
1 | 本机mac地址: 00:ff:63:f9:b4:ef |
这样我们需要用户把加密后的字符串发送过来就可以了。我们就可以获取到用户的基本信息了,其中name和email是用来辨别身份的,和激活码的生成无关。
生成激活码
1 | let time_begin = Date.parse(new Date()) / 1000; |
结果
1 | 开始时间:1645938395 |
我们就可以把加密后的字符串作为激活码发送给用户了。
这样这个激活码不但限制了使用的设备,还限制了使用的时间。
日期加密
上面其实已经可以了,但是我们必须再开发一个专门生成激活码的应用,这里图省事,就直接把激活码生成器放在了程序中,但是不能让用户也能生成,这里就设计了一个加密的算法,每隔一个小时自动变更,这样我们可以输入日期密码,进入激活码的生成页面。
date_enc.js
1 | import { md5 } from "./md5"; |
调用
1 | import { date_enc } from "./utils/date_enc"; |
系统对接
这种激活方法的弊端在于用户如果修改本地时间就可以一直使用。
页面效果
激活页面
获取激活码页面
渲染进程
渲染进程页面
1 | <div> |
渲染进程JS
1 | const md5 = require("md5"); |
主进程
1 | // 获取预激活码 |
测试激活码
预激活码
1 | 713bfee46b6bfabfd8923769b2882daca6e49e97ee94b1d8daef22d361377fb9c26d4f39871c1ebcd7eeddf84fa2c3e53e93de900521906ceeb3ec9b7e439957dbdf5cfd6c80142e5baf9a2ce10ef3e8 |
激活码
1 | 713bfee46b6bfabfd8923769b2882daca6e49e97ee94b1d8daef22d361377fb9c26d4f39871c1ebcd7eeddf84fa2c3e53e93de900521906ceeb3ec9b7e439957d9612210261f11393adc81eca995735cc94fef4be5c6f2cd7489b5b7a49589e65cda876dffa58bfc640f713b8bf23e5801b641e63cf111c1f8d3405800d8c0b2 |