卡密设计指南
背景
设计一个自动化脚本工具,其中集合多中类型的脚本,需要对单独的项目功能进行卡密操作。
环境
- 语言:nodeJs
- 环境:Windows
字典
- 卡密:用于充值自动化脚本对应项目功能点的秘钥,由服务商生成,客户导入使用。
- 项目功能点:每个脚本对应一个项目功能点,比如某音刷数据、某书刷数据。
- 项目功能点数据:一个对象数组的数据结构,其中对象属性包含了功能点appName以及功能点到期时间。
1. 细节分析
主要的考虑点有以下几点:
- 项目功能点的唯一性
- 每台机器的唯一性
- 安全性(对称加密)
1.1 项目功能点的唯一性
自动化脚本工具需要的是对单一功能进行管控,所以这边设计了一个变量,为对象数组结构,方便扩展,由于功能点是已知的。
默认项目功能点数据,程序数据初始化用。
[{
// 对应功能点名称
appName:"app1",
// 到期时间
expirationTime:"19710101",
}]
1.2 机器唯一性
这边通过了nodeJS自带的os库,采取了机器的基本设置,以及MAC地址,以此作为唯一标识。
const os = require('os');
const {
execSync } = require('child_process');
function getMachineUniqueInfo() {
const networkInterfaces = os.networkInterfaces();
let macAddress;
for (const interfaceKey in networkInterfaces) {
const networkInterface = networkInterfaces[interfaceKey];
const interfaceInfo = networkInterface.find(info => !info.internal && info.mac !== '00:00:00:00:00:00');
if (interfaceInfo) {
macAddress = interfaceInfo.mac;
break;
}
}
const cpuInfo = os.cpus()[0].model;
const arch = os.arch()
const diskSerialNumber = execSync('wmic diskdrive get serialnumber').toString().split('\n'