使用 VB 创建和检查许可证密钥
生成和检查嵌入 16 位配置信息的许可证密钥
引言
为您的专有代码创建和验证安全的“许可证密钥”,并将多达 16 位的“配置数据”嵌入到密钥中。此代码非常灵活,可用于许多不同的许可方案。
背景
每个人都熟悉获取许可证密钥来激活软件。这些密钥通常基于各种加密方案,用于验证特定用户是否有权安装或运行该软件。这里提供的代码提供了一种简单的方法将此功能集成到您自己的程序中。
示例应用程序生成的密钥是“被许可人”名称、“序列号”和嵌入到代码中的“秘密”程序名称字符串的 MD5 哈希值。然后,我们将十六进制的 32 个字符的字符串转换为 Base32,以将生成的密钥缩短为 26 个字符。这对于最终用户来说更容易键入,并且看起来更好,更专业。
该代码大部分都很简单明了,可以很容易地翻译成其他语言,例如 C、C++、C#、Java 等,并以尽可能“通用”的 Visual Basic 形式呈现,以便于集成到应用程序中。如果需要,甚至可以在 Microsoft Access 等 VBA 应用程序中使用它。
请注意,本文中的所有代码均已获得 LGPL 许可,因此可以将其合并到您的程序中,而无需支付版税,并且不会以任何方式修改您的专有代码的许可条款。我们要求您如果对密钥生成代码本身进行任何更改,请以与您收到代码时相同的条款发布该代码。
此外,此代码提供了一些有用的字符串函数,用于将字符串中编码的二进制值编码/解码为 Base32,并将这些值按位左移和右移任意位数。
Using the Code
只需将KeyCodes.bas、StrFuncs.bas 和 MD5_Crypt.bas 文件包含到您的项目中。您可以提示您认为与您的许可方案相关的任何信息,它最终应该在两个字符串值和一个LONG
整数值中,指示您希望嵌入到密钥代码中的功能。
预计此代码的用户将修改密钥生成以满足他们的需求。 *keycodes.bas* 文件例程很容易修改以提供不同的密钥值,并且可以形成构建您自己的密钥代码例程的简单基础。想到的一种更改是将 Base32
字符串从 26 个字符缩短为 25 个字符,然后将“数字”分成五组,以提供更好看的密钥。
这是基于文本框生成密钥的主要代码
Private Const MyProductName = "KeyCodeDemoV1"
. . .
If Not (UserNameT = "") Or Not (ProdNameT = "") Then
RawKey = GenKeyString(UserNameT, ProdNameT & MyProductName, FeatID)
BinKey = HexStrToBinStr(RawKey)
KeyCode = FormatKeyCode(Base32Enc(BinKey), 4)
Else
KeyCode = "Please Enter Licensee and/or Serial Number"
End If
. . .
密钥强度
此代码生成的密钥相对安全,因为它们基于用于生成密钥的数据的 MD5 哈希值。您可以通过在安装过程中生成 GUID,并将其与“用户名”字段连接起来,然后通过在线提交过程生成密钥来提高安全性。 这留给读者练习。
代码的设计强烈反对篡改密钥。 每个密钥都是从被许可人、序列号和您的“秘密”的 MD5 哈希生成的。 创建此哈希后,我们将“权限”位与密钥的最后两个字符进行异或,然后删除密钥的前两个字符,运行带有权限的截断密钥的另一个 MD5 哈希,然后使用第二个 MD5 哈希的第一个和最后一个字节作为最终二进制密钥值的第一个两个字符。 这些字节验证权限位的完整性。
也可以使用算法对最终密钥进行“加扰”。 只需确保在尝试使用密钥应有的内容验证密钥之前“解扰”密钥。
示例截图
- 创建一个密钥...
- 输入要检查的密钥...
- 成功检查...
- 由于尝试修改密钥“权限”字节而导致的检查失败...
历史
- 初始文章 - 2007 年 5 月 23 日