Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# dotnet技术中的类库与安全_C# - Fatal编程技术网

C# dotnet技术中的类库与安全

C# dotnet技术中的类库与安全,c#,C#,假设我已经开发了类库,我希望我只能在我的项目中使用这个库,但是如果有人试图复制dll文件并希望在他的项目中使用它,那么他将无法这样做。所以我只想知道如何在dll文件中嵌入这种类型的安全性…请告诉我所有的方法。谢谢检查调用程序集的签名,并对调用dll的程序集进行签名。然后对dll进行签名。当要实例化库时,可以调用许可技术。我过去所做的是将公钥作为资源包含到dll中,然后查找带有用私钥签名的加密签名的许可证xml文档。只要我密切跟踪我的私钥,就很难击败它 话虽如此,.Net显然是可反编译的-请确保使

假设我已经开发了类库,我希望我只能在我的项目中使用这个库,但是如果有人试图复制dll文件并希望在他的项目中使用它,那么他将无法这样做。所以我只想知道如何在dll文件中嵌入这种类型的安全性…请告诉我所有的方法。谢谢

检查调用程序集的签名,并对调用dll的程序集进行签名。然后对dll进行签名。

当要实例化库时,可以调用许可技术。我过去所做的是将公钥作为资源包含到dll中,然后查找带有用私钥签名的加密签名的许可证xml文档。只要我密切跟踪我的私钥,就很难击败它


话虽如此,.Net显然是可反编译的-请确保使用Dotfuscator之类的工具对其进行模糊处理。

您可以在程序集中验证调用签名程序集的PublicKeyToken

第二个例子是在VB.NET中,找不到C#版本,但你会明白的


请注意这不是一种绝对安全的方法,因为仍有人可以反编译您的程序集。但是,如果只是为了防止在其他项目中使用您的库,这可能是一种可以接受的方式。

不安全,但更难滥用:您可以使用

  • 将它们合并在一起或

防止这种情况发生的唯一真正安全的方法是不要发送DLL。如果在键入字母字符时按住Shift键,它将以大写形式生成该字符。Henk+1 Tergiver+1用于智能注释:-)您的答案的可能副本不是很清楚……请您用代码片段详细解释,以便我正确实现它。thanks@Tim:反编译器无法帮助您对抗私钥和公钥。此外,还有一个模糊器(静态)链接.NET framework,因此您无法使用Dis#或IDA Pro Advanced进行反汇编;我可以反汇编二进制文件并删除检查。混淆器只是混淆,即使代码更难破译;他们不加密它。在反射器等到达之前,人们就开始反向工程保护了。@Tim:这正是我的观点。如果.NET是静态链接的,则不能反编译它,既不使用.NET反编译器(DIS)/反反射器,也不使用C++反编译器。如果它被签名了,你不能仅仅改变一些东西,这将改变签名,这意味着它将无法运行。首先,如何将PublicKeyToken分配给dll,然后如何检查代码的编写。请帮助我详细了解代码片段。阅读您的答案后,我得到了一些问题。1) 如何在开发类库时调用许可技术。2) 如何将公钥作为资源添加到dll 3)如何查找带有使用私钥签名的加密签名的许可证xml文档,以及从何处和何时查找。如果你能给我一份申请表的样本就更好了。谢谢,洛蒂不能给出我使用的准确代码,因为这是我雇主的知识产权,但我可以给你一些更具体的指导。首先,我将创建一个静态类License,它带有一个静态方法Invoke。我会在库的构造函数中调用这个方法(或者工厂方法,如果你这样做的话)。在Invoke方法中,您正在本地目录(或配置的许可证目录,如果您愿意)中查找文件“license.xml”。如果找不到,则抛出一个异常,可能是“UnlicenseUsageException”。如果找到,则获取其中的Xml,并删除包含签名的最后一个节点。然后,在没有签名节点()的情况下,根据Xml验证签名字节。如果失败,则抛出上述异常。全部完成。最后一件事-您需要编写一个小应用程序来生成许可证文件并使用您的私钥()对其进行签名。仅供参考,看起来@Thomas将此转换为。。。