2014-07-11 40 views
-3

我有一个班级ProductKeyLib,它是项目的一部分,该项目本身是解决方案MyProgram的一部分。截至目前,这个lib只检查密钥是否有效,但不会生成密钥。 密钥生成接口将在项目MyProgram-KeyGen中,该解决方案也是解决方案MyProgram的一部分。在两个项目中使用班级

现在,棘手的部分: 我想在一个类中同时具有两个函数(生成和检查),因为,正如您所猜测的,当一切都在时,密钥生成和密钥检查之间的100%兼容性可以更好地实现一个文件,而且我的单元测试将会更容易。

但是:这两个程序都应该在他们的程序中包含该部分,我不想拥有特殊的dll。此外,只应该包括检查部分,而不是密钥生成。

我可以在VisualStudio中做到吗?如果是这样,怎么样?

+0

保持原样。编写一个集成测试,以确保它们保持一步... –

+0

您可以将源代码文件作为链接包含到项目中。这将是两个不同的类,但是您将拥有一个到它们的单个访问点。只需按下“添加现有项目”对话框中的“添加”按钮上的箭头,然后选择“添加为链接” – mazharenko

+0

不要认为这是一个好主意,但是像@mazharenko提到的那样,您可以这样做。 。 –

回答

1

嗯,这可能不是一个好主意,但你可以使用编译器定义和链接源文件的组合。

所以你会有一个单一的cs文件,其中包含所有链接到这两个项目的代码(没有公共库 - 只是单个代码文件)。在这里面,你把所有的代码:

#if KeyGen 
public string GenerateKey(...) 
{ 
    ... 
} 
#endif 

public bool CheckKey(...) 
{ 
    ... 
} 

然后,在你凯基项目,你会放一个编译器定义命名KeyGen,并且生成的代码将只在凯基部分进行编译,而不是客户端应用程序。

但是,这仍然反映了“默默无闻的安全性”。如果密钥生成和检查确实很重要,那么这是不够的。例如,只要知道密钥是如何被检查的,在很多情况下你可以很容易地找到构建密钥的方法(即使没有使用GPU,甚至蛮力算法现在都非常可靠)。

+0

每种许可证密钥或密钥检查都可以通过程序进行反向设计和/或删除。所以每个程序都可以在不需要密钥或任何东西的情况下工作。没有“正在运行”的DRM - 除了保证程序在我自己的服务器上安全,只向客户提供API。 (这不会与我们的客户合作,因为有些需要独立于互联网)。所以,是的,这就像每个许可证密钥一样,是“隐藏的安全性”。如果你有一个想法如何做一个100%安全的离线检查,最好不要让我知道 - 去卖给RIAA,他们会支付你数百万美元。 – Alexander

+0

PS:我需要提及的是,该程序是50%编译C#和50%“编译”(混淆/缩小)JS? PPS:我非常小心,不会在JS中包含许可证检查:p – Alexander

+0

是的,你正在向合唱团传道。如果只有负责DRM的人员理解了如何轻松实现任何支票......我实际上也必须实施DRM一次。您必须通过发送短信激活应用程序。验证过程非常稳健。客户端的检查?只需在这里添加一个小小的跳跃,而且耶,没有检查! :d – Luaan