1、首先要创建一个密钥文件(*.snk)

打开VS的命令行工具,输入命令:sn -k f:\PublicKey.snk。按回车键命令行会自动生成一个密钥文件。

f:\  —— 是密钥文件输出的位置,这个可以自己设置,如果不添加,密钥文件则会自动生成在命令提示行的根文件夹下

PublicKey —— 是密钥的文件的文件名,可以自己随意起名字

2、为项目添加密钥文件

3、设置DLL中所有类的修饰符

DLL所有的类,除了单独留下一个修饰符为 public 完全公开的类,作为公共出口,其余的类的修饰符全部更改为 internal 仅程序集可见

4、为程序集唯一的公共类添加校验方法

该程序集中,所有类包含的对外方法,都要通过唯一公共类来进行调用,要注意的是,该公共类中所有的方法和属性等,

不能是静态的。而校验密钥的方法,则放在该公共类的构造函数当中。

公共密钥里的“公共密钥标记”和“公共密钥”可以通过在这个方法里加入断点查看(也可以使用VS命令行来获得),然后

在经过MD5加密后,得到密钥和密钥标记,并设置为常量。

将该程序集生成为DLL,并使用代码混淆软件进行混淆(注意:如果程序集中有涉及到序列化和反序列化,请不要使用代码

混淆软件,因为程序集中有序列化和反序列化的应用,使用代码混淆软件混淆后,有可能使应用到序列化和反序列化的地方

出现异常或不可预知的错误)。

总结、如此设置后,只要调用该DLL的项目没有添加指定的密钥文件,基本上就无法使用该DLL文件中的任何方法。当然凡事

并不绝对,这样做只能是让没有得到授权的用户使用该程序集生成的DLL的使用成本大大提高罢了。任何的加密方法也不能说

是百分之百安全。这是本人的一点愚见,如有遗漏或错误,还请指正。

防止非授权用户调用DLL的更多相关文章

  1. C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 增强服务安全、阻止非授权的用户非法调用

    多一道防线,多一些安全保障,当程序发布到互联网上,再有成千上万的用户在用,总会有各种牛人出现,万一遇到破坏分子,那会有灾难性的打击. 只要跟利益有关系的,跟资金有关系,跟财务有关系,有竞争对手,软件系 ...

  2. (转)C#调用非托管Win 32 DLL

    转载学习收藏,原文地址http://www.cnblogs.com/mywebname/articles/2291876.html 背景 在项目过程中,有时候你需要调用非C#编写的DLL文件,尤其在使 ...

  3. Docker 为非root用户授权

    Docker 为非root用户授权: 当运行docker pull busybox时候,会提示sky用户无法调用docker. 那么应该把sky用户加入docker用户组,不过在添加的时候,又提示了如 ...

  4. oracle 非sys用户创建新用户 授权后 plsql看不到视图

     问题: oracle 非sys用户创建新用户 授权后  plsql看不到视图 答案: 新用户查询视图时,视图名称前需要添加 视图所属用户. 如user用户新建newUser用户,newUser用户查 ...

  5. centos7新增用户并授权root权限、非root用户启动tomcat程序

    一.centos7新增用户并授权root权限 cat /etc/redhat-release查看centos版本号 1.禁用root账户登录 vim /etc/ssh/sshd_config 找到这一 ...

  6. 非root用户安装软件

    下面简要说一下Linux下非root用户安装软件的一般流程: 1. 获取源代码,一般是wget方式,ubuntu可以使用apt-get source来获取源代码. 2. 解压源代码,一般使用tar - ...

  7. LabVIEW如何方便地调用DLL文件

    转自:http://bbs.elecfans.com/jishu_469502_1_1.html   LabVIEW调用DLL文件 LabVIEW支持通过调用DLL文件的方式与其它编程语言混合使用.比 ...

  8. 如何使用g++编译调用dll的c++代码

    本文将有以下4个部分来讲如何使用g++编译调用dll的c++代码. 1.如何调用dll 2.动态链接和静态链接的区别 3.g++的编译参数以及如何编译调用dll的c++代码 4.总结 1.如何调用dl ...

  9. c# 调取 c++ dll____c#调用dll

    1.以海康摄像头dll为例.(文章转载https://www.cnblogs.com/smartsensor/p/4343744.html) 海康SDK编程指南 目前使用的海康SDK包括IPC_SDK ...

随机推荐

  1. 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "StdAfx.h"”?

    在查找预编译头时遇到意外的文件结尾.是否忘记了向源中添加“#include "StdAfx.h"”? 右键选择该文件.cpp格式的->属性->预编译头,→ 不使用预编译 ...

  2. iOS 新特性关键字

    1.用来修饰属性,或者方法的参数,方法的返回值 /** nullable:表示可以传空 */ //@property (nonatomic, strong, nullable) NSString *n ...

  3. fancybox的使用

    fancybox,个人没有深入了解,只是为了工作需要,做的一些界面,主要是用的AJAX功能. 首先,需要下载fancybox的js文件以及CSS文件(可能用不到) 其次,在页面中引入 <scri ...

  4. 在vs中跑动ransac

    期间遇到很多问题. 记一个最主要的是: LINK2019 无法识别的外部符号,然后某一个函数的函数名 然后是 @@函数名 (@) 大概长成这样.或者还就根本就是 无法识别的外部符号. 解决方案: 我这 ...

  5. [未完成]关于Eclipse4RCP书中内容总结

    原文地址http://www.vogella.com/tutorials/EclipseRCP/article.html Table of Contents 1. Eclipse 4 1.1. Wha ...

  6. UseAdaptiveSizePolicy与CMS垃圾回收同时使用导致的JVM报错

    系统在灰度环境上变更时发现JVM启动报错,详细检查JVM配置参数,发现新境了如下配置: -XX:+UseAdaptiveSizePolicy和-XX:+UseConcMarkSweepGC 初步猜想是 ...

  7. 纯jq编写增删改,弹出框

    <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head>    < ...

  8. MongoDB - Introduction to MongoDB, Capped Collections

    Overview Capped collections are fixed-size collections that support high-throughput operations that ...

  9. Android之记账本

    这个ColaBox记事本是我从网上下载下来的拿来学习一下的(APK下载点这里.) 从登记收入与开支的页面跳转到账单页面运用了SQL数据库的录入,整体表的结构为: db.execSQL("CR ...

  10. centos6.5下磁盘创建交换分区

    1.创建磁盘交换分区 2.创建文件交换分区