我正在使用 C# 并且有一个用户输入的密钥来激活我的程序。我不希望用户在输入密钥后就能够看到它。你对如何/在哪里存储它有什么建议吗?
5 回答
您可以将密钥保存为单独的文件。加密密钥并保存。因此,即使用户试图篡改它,您也可以停用该应用程序。
您可能对 codeplex 中的这个项目感兴趣:http: //licenser.codeplex.com/
编辑:一些问题供您检查。
您当然可以将密钥存储在可执行文件的资源中,它的过程相当长,有几个可用的 API,如 OpenResource、GetResourceData 和 UpdateResource,除非您安装了 Visual Studio 工具,否则无法轻松访问资源。
但是您不能修改当前正在运行的可执行文件的资源,但是您可以创建不同的激活程序来加载您的主要可执行文件,修改资源并保存它。
假设一台 Windows 机器正在运行您的应用程序,您还可以使用注册表来存储您的加密密钥(可能是 MD5?)。
这样,它不在用户可以查看的“文件”中(尽管用户可以查看/更改/删除它)。
在我看来,用户(标准用户......)往往不会查看注册表 - 您可以在那里隐藏您的密钥。
实际上,@Shoban 的第一个链接where-should-i-store-my-applications-activation-key有更多关于这个问题的讨论 - 你应该阅读它......
我知道这更像是加密密钥 - 但是Windows 密钥容器呢?
忘记试图掩盖您保存许可证密钥的位置 - 您将无法阻止确定的用户,并且如果您尝试将许可证信息存储在“奇怪”的地方,您只会惹恼系统管理员。忘记尝试存储在您正在运行的可执行文件中的所有内容,这很难做到万无一失,并且会触发大量防病毒软件。
如果您想要防篡改的东西,请选择其中一种商业解决方案;抱歉,如果这听起来很苛刻,但是考虑到您要问这样的问题,您不会想出任何难以破解的东西。