发布软件注册码商品
整体流程图
mermaid
graph TD
A["(1)软件开发者:在 80fafa 创建注册码商品\n配置密钥/有效期"] --> B["(2)开发者的软件:采集机器特征并生成机器码"]
B --> C["(3)软件购买者:从软件界面获取机器码"]
C --> D["(3)前往 80fafa 购买页:选择时长、输入机器码并支付"]
D --> E["(4)80fafa 平台:使用密钥 + 机器码 + 购买时间\n用 AES 加密生成秘文注册码并发给购买者"]
E --> F["(5)购买者:获得注册码并在软件中输入"]
F --> G["(6)开发者的软件:使用同一密钥对注册码进行 AES 解密"]
G --> H{"(6)校验结果:\n机器码匹配?有效期/额度有效?"}
H -->|通过| I["注册成功:写入授权并获得注册信息(时长/额度等)"]
H -->|不通过| J["注册失败:提示错误或拒绝授权"]角色泳道图
mermaid
graph LR
subgraph lane_buyer["软件购买者"]
C1["获得机器码"]
C2["下单选择时长<br/>输入机器码并支付"]
C3["收到注册码"]
C4["在软件中输入注册码"]
end
subgraph lane_app["软件应用"]
A1["生成并显示机器码"]
A2["解密并校验注册码"]
A3["写入授权信息"]
end
subgraph lane_platform["80fafa 平台"]
P1["AES(密钥, 机器码, 购买时间)<br/>生成秘文注册码"]
P2["发送注册码给购买者"]
end
subgraph lane_dev["软件开发者"]
D1["在 80fafa 创建商品<br/>配置密钥/有效期"]
D2["实现机器码生成与 AES 解密校验"]
end
%% 业务流
D1 --> A1
A1 --> C1
C2 --> P1
P1 --> P2 --> C3 --> C4 --> A2 --> A3类图(主要实体与关系)
mermaid
classDiagram
class Developer {
+configureSecret()
+generateMachineCode(app)
}
class Buyer {
+getMachineCode()
+purchase(duration, machineCode)
+receiveLicense()
+activate(license)
}
class Platform {
+issueLicense(secret, machineCode, duration)
}
class App {
+showMachineCode()
+decryptLicense(secret, license)
+validate(machineCode, expiry, quota)
}
class License {
+ciphertext
+expiry
+quota
}
Developer --> Platform : 配置密钥
App --> Buyer : 显示机器码
Buyer --> Platform : 提交机器码与购买时长
Platform --> Buyer : 发放秘文注册码
Buyer --> App : 输入注册码
App --> License : 解密获得信息许可证状态图(生命周期)
mermaid
stateDiagram-v2
[*] --> Unregistered
Unregistered --> PendingPurchase : 用户选择时长/输入机器码
PendingPurchase --> LicensedActive : 平台发放注册码
LicensedActive --> LicensedExpired : 到期
LicensedActive --> LicensedInvalid : 机器码不匹配/篡改
LicensedExpired --> Renewal : 用户续费
Renewal --> LicensedActive
LicensedInvalid --> [*]用户旅程图(购买者视角)
mermaid
journey
title 软件购买者旅程
section 获取机器码
查看机器码: 5:Buyer
section 购买
选择时长并支付: 4:Buyer
section 收到注册码
收到并保存注册码: 5:Buyer
section 激活
在软件中输入注册码: 4:Buyer
获得授权信息: 5:Buyer授权时长与生命周期(甘特图)
mermaid
gantt
title 授权时长与生命周期
dateFormat YYYY-MM-DD
section 购买与发放
购买并发放注册码 :done, a1, 2025-01-01, 1d
section 授权有效期
授权有效(使用期) :active, a2, 2025-01-02, 30d
section 到期与续费
到期 :crit, a3, after a2, 1d
续费(可选) : a4, after a3, 30d创建软件注册码商品
商品类型为纯秘文的软件注册码,主要用于售卖付费软件注册码、游戏点卡等, 商品本身是一串用于激活或充值的验证代码。
在商品列表点击"添加商品"跳转到创建商品页面,填写商品名称、商品简介,商品类型选择"纯秘文",秘文类型选择软件注册码,用户根据商品需要填写加密秘钥,机器码,单位额度。


时长模式是有“按月购买”和“永久有效”这两种模式,主要作用是终端用户获得注册码激活软件可使用的时间。
你可以指定过期时间、是否需要留言,当商品已过期终端用户将无法购买此商品,发码用户选择需要强制留言,此时终端用户必须填写留言才可以购买商品,输入商品价格。
点击“创建”按钮来发布商品后,就会跳转到商品详情页看到加密秘钥和商品链接。

在软件中内置 RegistrationEasy 程序代码
github 提供开源的软件注册码的示例,开源代码https://github.com/Sophia268/RegistrationEasy, 用户要在软件中内置 RegistrationEasy 程序代码。
程序使用的是 Base64 解码和 AES 解密 , 先将密文字符串从 Base64 解码为字节数组,使用相同的密钥和 IV 进行 AES 解密,通过 CryptoStream 进行解密流处理。

机器码生成原理:先采集硬件信息,再进行哈希处理,然后格式化为 XXXX-XXXX-XXXX-XXXX 的形式,例如 A1B2-C3D4-E5F6-G7H8,支持 Windows、Linux、macOS 多平台机器码生成。

以下是示例:
- 程序中 Config.json 文件目前以明文方式填写了商品加密密钥(Password)和商品购买链接(URI),这仅为示例。出于安全考虑,建议将这两项敏感信息改为在编译时通过 DL(或预编译指令)等方式嵌入,避免在配置文件中明文存储。

- 终端用户可直接在 RegistrationEasy 程序上点击"Purchase Code"按钮跳转到购买页面。


- 支付完成后获取秘文(此秘文即注册码),复制秘文并粘贴到此程序点击"Verify Code",会显示解码结果;


