我正在尝试为我的 C# 2.0 桌面应用程序创建一个注册码,这是一个按使用付费的应用程序。注册码必须在其中隐藏一个 int 值(int 值代表应用程序的使用次数)。
为了从我的机器生成代码,我有一个单独的应用程序,它使用名称、随机数和使用次数作为输入。例如:
Name: BOBSMITH
Random number: 51728
Number of Uses: 50
Concatenated String: BOBSMITH_51728_50
如果我对连接字符串(例如 MD5 哈希)进行哈希处理,我会得到一个 32 十六进制字符串(我将其称为 Reg 代码),类似于:
ABCD 1234 EFGH 5678 IJKL 9012 MNOP 3456
现在,在我的用户方面,当他们注册应用程序时,我需要验证注册代码并从注册代码/名称/随机数中确定使用次数。所以用户将输入这些值:
Name: BOBSMITH
Random Number: 51728
Reg Code: ABCD 1234 EFGH 5678 IJKL 9012 MNOP 3456
我的问题:我的应用程序如何确定(仅基于名称、随机数和注册码):
- 注册码是否正确
- 我的机器最初给出的使用次数
我想到的一个简单想法是仅基于名称和随机数(我们称之为代码 A)生成一个哈希,然后将使用次数添加到此哈希(代码 B)中。例如:
Code A: ABCD 1234 EFGH 5678 IJKL 9012 MNOP **1184**
Code B: ABCD 1234 EFGH 5678 IJKL 9012 MNOP **11B6**
如果我们从代码 B 中减去代码 A,我们得到 50。因此,我的用户将输入这些值:
Name:BOBSMITH
Random Number: 51728
Reg Code: ABCD 1234 EFGH 5678 IJKL 9012 MNOP 11B6 (Code B)
为了验证 Reg 代码和使用次数(从用户端),我的应用程序将采用 Name & Random Number 的哈希值,这将给出与 Code A 相同的值。然后我将从 Reg Code 中减去 Code A用户输入并看到差异是 50。因此,我知道给用户 50 次使用。然而,这个解决方案似乎太不安全了。我会很感激任何人的建议。