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. pydev+python+Eclipse环境搭建+ 调试快捷键汇总

    http://www.cnblogs.com/Bonker/p/3584707.html 编辑器: Eclipse + pydev插件 1. Eclipse是写JAVA的IDE, 这样就可以通用了,学 ...

  2. Ruby on Rails Tutorial 第四章 Rails背后的Ruby 之 其他数据类型(二)

    1.方法 定义如下所示: def string_message(str='') if str.empty? "It's an empty string!" else "T ...

  3. Link List

    At first, i prepared to go through <the introduction to algorithm> ,however , i found some par ...

  4. 实例源码--Android简单音乐播放器源码

      下载源码   技术要点: 1.本地音乐管理 2.在线音乐听歌.下载 3.音频流的解码 4. HTTP通信模块 5. Sqlite数据库 6. 源码带详细的中文注释 ...... 详细介绍: 1.本 ...

  5. LSM Tree解析

    引言 众所周知传统磁盘I/O是比较耗性能的,优化系统性能往往需要和磁盘I/O打交道,而磁盘I/O产生的时延主要由下面3个因素决定: 寻道时间(将磁盘臂移动到适当的柱面上所需要的时间,寻道时移动到相邻柱 ...

  6. 用VB操作Excel的方法

    VB是常用的应用软件开发工具之一,由于VB的报表功能有限,而且一但报表格式发生变化,就得相应修改程序,给应用软件的维护工作带来极大的不便.因此有很多程序员现在已经充分利用EXECL的强大报表功来实现报 ...

  7. nginx.conf配置及优化相关

    nginx.conf配置文件内容 user www www; worker_processes ; worker_rlimit_nofile ; error_log /data/nginx/logs/ ...

  8. xcode笔记

    1.Alt键的使用   2.设置捕捉所有意外断点:停在代码出错处     2015年07月27日09:52:12 3.搜索 command + F:在当前的文件中搜索 command + Shift ...

  9. 隐藏tabBar页面跳转后会再布局一次,

    隐藏tabBar有2种方式 1,在sourceController中隐藏目的控制器的tabBar - (void)prepareForSegue:(UIStoryboardSegue *)segue ...

  10. Write a beautiful button

    .btn-warning { color: #fff; text-shadow: 0 -1px 0 rgba(0,0,0,0.25); background-color: #faa732; backg ...