我应该在哪里存储我的应用程序的“激活”密钥?

Posted

技术标签:

【中文标题】我应该在哪里存储我的应用程序的“激活”密钥?【英文标题】:Where should I store my application's "activation" key? 【发布时间】:2010-11-10 01:42:41 【问题描述】:

我已经编写了一个应用程序,我想在其中添加一个注册密钥/序列号(我非常重视最小的不便 - ala #4 this Eric Sink article)。我的问题是关于应用程序注册后在哪里存储“激活”。据我了解,我在将密钥存储在所有用户都可以阅读的公共场所(但需要管理员权限才能保存)和存储每个用户激活(但随后每个用户都在计算机将必须独立激活)。这给了我两个选择:

    某些具有本地管理员权限的用户激活了产品。激活存储在 HKLM、程序文件文件夹或其他所有用户都可以阅读的位置,并且该产品已为所有用户激活。 用户(有或没有管理员权限)激活产品。激活存储在以用户为中心的某个地方(每个用户的 app.config、HKCU 等)。优点是用户不必是管理员。缺点是如果有 6 个用户使用计算机,每个用户都必须激活产品。他们每个人都可以重复使用同一个序列号,但他们仍然必须输入它。

这真的是权衡吗?如果是,其他人做了什么?作为一名开发人员,我习惯于成为本地管理员,但在现实世界中,我不希望我的许多公司用户成为本地管理员,这使我倾向于选项 2。计算机不经常共享吗足够我不用担心了吗?

再一次,我不是在问如何实际注册计算机 - 我并不担心。我只会对提供的密钥进行校验和并给予批准,因为我希望尽可能做到非侵入性。

【问题讨论】:

【参考方案1】:

我会推荐一个不需要管理员权限的解决方案。许多用户,特别是在共享环境中,没有这些权利,也无法方便地找到任何人。

此外,随着安全形势的改善,我认为在您使用的计算机上拥有管理员权限将变得越来越不寻常。

【讨论】:

但是在同一台计算机上为不同的用户一次又一次地注册同一个应用程序实在是太烦人了!我认为这是应用程序设计中的一个缺陷。 嗯,我们使用的一种解决方案是将激活信息放在当前用户注册表中,然后如果管理员权限可用,也将其放在本地计算机中。如果管理员权限可用,则机器上的任何共享用户都不会受到麻烦。如果没有可用的管理员权限,则要求每个用户激活一次。 我喜欢至少将其存储在 HKCU 中的想法,如果用户具有管理员权限,也可以将其存储在 HKLM 中。这似乎是最小的不便 - 注册不会需要管理员权限,但如果他们在那里,就会利用它们。【参考方案2】:

注册表对于商业软件来说似乎是一个不错的解决方案。至少在我以前工作的地方,普通用户不会是本地计算机管理员,所以每次安装都需要本地管理员帐户。这是一件好事,因为它将减轻您的支持人员的头痛,因为人们在您的业务计算环境中安装了几乎所有东西。权衡当然是,用户会因为他们无法安装东西或必须联系支持人员而生气,但是嘿...... :)

其他东西:

USB / 其他类型的加密狗(ala old 3DMax) 普通的旧文本文件(ala 移动设备上的 Garmin GPS 软件) 对它们进行编码/将密钥重写为 你的二进制文件或你的二进制文件的一部分 (这个技巧是在旧的 DOS 中做的吗? 天) 通过网络将它们存储在您自己的数据库中(ala EverQuest / 其他 MMORPG 游戏) 本地密钥数据库(我认为是数学实验室)

【讨论】:

【参考方案3】:

为您的应用程序使用隔离存储怎么样?

您将能够在 mashiene 级别存储此信息以供您注册,并且配置更改可以在用户级别持久保存。

【讨论】:

你能举个例子说明我如何做到这一点吗?我不熟悉这个术语,所以我想确保我理解你的想法。 你可以在这里找到一个例子:msdn.microsoft.com/en-us/library/…【参考方案4】:

我们将激活码保存到当前用户 (HKCU) 的注册表中,我们几乎没有遇到任何问题。我们的客户可以在从家用计算机到协作网络上的瘦客户端的所有设备上运行。

如果您的软件将在学校或其他教育环境中使用,您需要提供一些其他方法。它可以像一个单独的注册应用程序一样简单,它将保存到所有用户的激活中。您的软件必须进行两次注册表查找,但这是一个很小的代价。

【讨论】:

【参考方案5】:

一般来说,大多数计算机由一个用户使用(或多个人仍在使用同一个用户帐户)。因此,无论如何,基于用户的存储大部分时间都可以工作。

但这不是非此即彼。有一些文件夹位置可供所有用户写入 - 例如 ProgramData 文件夹。关键是让文件对所有人都可读/可写,这样你就可以验证内容,而不管用户是谁。

DeployLX Licensing 对非安全许可证数据执行此操作,以便多个用户可以在没有管理员明确授予权限的情况下使用它。

【讨论】:

【参考方案6】:

你应该保持一致。如果安装程序需要管理员权限,那么需要管理员权限来注册它并没有什么不妥。同样,如果您以某种方式设法在没有管理员权限的情况下安装它,那么也无需注册。

如果您一步安装和注册,这将不是问题。

【讨论】:

以上是关于我应该在哪里存储我的应用程序的“激活”密钥?的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 上的哪里存储 API 密钥?

我应该在 web 应用程序的 spring/spring-security 中将用户 ID 密钥存储在哪里?

如何使用 React + Webpack 应用程序存储和访问我的 API 密钥?

在Swift上存储API密钥的位置?

在哪里保存应用程序的激活数据?

在哪里存储我的密钥以加密移动设备上的数据?